UVA 253 Cube painting(暴力打表)
Cube painting
Problem Description:
We have a machine for painting cubes. It is supplied with three different colors: blue, red and green. Each face of the cube gets one of these colors. The cube's faces are numbered as in Figure 1.
Figure 1.
Since a cube has 6 faces, our machine can paint a face-numbered cube in tex2html_wrap_inline126 different ways. When ignoring the face-numbers, the number of different paintings is much less, because a cube can be rotated. See example below. We denote a painted cube by a string of 6 characters, where each character is a b, r, or g. The tex2html_wrap_inline128 character ( tex2html_wrap_inline130 ) from the left gives the color of face i. For example, Figure 2 is a picture of rbgggr and Figure 3 corresponds to rggbgr. Notice that both cubes are painted in the same way: by rotating it around the vertical axis by 90 tex2html_wrap_inline134 , the one changes into the other.
Input:
The input of your program is a textfile that ends with the standard end-of-file marker. Each line is a string of 12 characters. The first 6 characters of this string are the representation of a painted cube, the remaining 6 characters give you the representation of another cube. Your program determines whether these two cubes are painted in the same way, that is, whether by any combination of rotations one can be turned into the other. (Reflections are not allowed.)
Output:
The output is a file of boolean. For each line of input, output contains TRUE if the second half can be obtained from the first half by rotation as describes above, FALSE otherwise.
Sample Input:
rbgggrrggbgr
rrrbbbrrbbbr
rbgrbgrrrrrg
Sample Output:
TRUE
FALSE
FALSE
这题我看了后觉得还算简单,就开始写了,我用的是找规律,然而发现不对,之后觉得要打表,因为没有规律。最后还有一个坑,就是比如1放底下,6放上面和6放底下,1放上面是不一样的,还有把表swap一下,也就是我的table2。写完直到a了,用了3,4个小时。。。- -
【题目链接】UVA 253 Cube painting
【题目类型】打表
&题意:
有一个正方体方块,6个面可以有不同的字母,但你必须按照题目中说的顺序去读它,先给你一个一个串s1,问你是否能用s1的方块任意变换,使他变成s2,也就是说s1和s2是否是同一个方块。
&题解:
这个我刚看完的话,大致想了下,有2*4*3种情况,2是2种不同的底,4是4个方向,3是3种情况,分别是1, 6和 4, 3和 5, 2。
那么比如就以1为底,6为顶,分别去找那4种情况,也就是变换的4种角度,打表(不要以为这有规律,就老实的打表吧,或许也有但我没发现),以下同理就好。不要忘了换了底之后swap表一下
【时间复杂度】O(24*n) n是输入的组数,因为共有24种情况
&代码:
#include <bits/stdc++.h>
using namespace std;
string s1, s2, s[50];
int ct;
bool fl = 0;
int g[3][2] = {1, 6, 4, 3, 5, 2};
int tt[3][4] = {2, 3, 4, 5, 1, 2, 5, 6, 1, 3, 4, 6};
int table[3][16] = {
2, 3, 4, 5, 4, 2, 5, 3, 5, 4, 3, 2, 3, 5, 2, 4,
2, 1, 6, 5, 1, 5, 2, 6, 5, 6, 1, 2, 6, 2, 5, 1,
1, 3, 4, 6, 3, 6, 1, 4, 6, 4, 3, 1, 4, 1, 6, 3
};
int table2[3][16];
void excha(int a) {
for (int i = 0; i < 4; i++) {
s[ct] = s1;
s[ct][0] = s1[g[a][0] - 1];
s[ct][5] = s1[g[a][1] - 1];
int t = 1;
for (int j = 0; j < 4; j++) {
s[ct][t++] = s1[table[a][i * 4 + j] - 1];
}
ct++;
}
for (int i = 0; i < 4; i++) {
s[ct] = s1;
s[ct][5] = s1[g[a][0] - 1];
s[ct][0] = s1[g[a][1] - 1];
int t = 1;
for (int j = 0; j < 4; j++) {
s[ct][t++] = s1[table2[a][i * 4 + j] - 1];
}
ct++;
}
}
void Solve() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 16; j += 2)
table2[i][j] = table[i][j + 1], table2[i][j + 1] = table[i][j];
while (cin >> s1) {
fl = 0;
ct = 0;
s2 = s1.substr(6);
s1.resize(6);
for (int i = 0; i < 3; i++)
excha(i);
// for (int i = 0; i < ct; i++)
// PI(s[i])
for (int i = 0; i < ct; i++)
if (s[i] == s2) fl = 1;
if (fl) puts("TRUE");
else puts("FALSE");
}
}
int main() {
Solve();
return 0;
}
UVA 253 Cube painting(暴力打表)的更多相关文章
- uva 253 - Cube painting(相同骰子)
习题4-4 骰子涂色(Cube painting, UVa 253) 输入两个骰子,判断二者是否等价.每个骰子用6个字母表示,如图4-7所示. 图4-7 骰子涂色 例如rbgggr和rggbgr分别表 ...
- UVA 253 Cube painting(枚举 模拟)
题意: 按如图的顺序给定2个骰子的颜色(只有r.b.g三种颜色) 问2个骰子是否一模一样 如 可表示为“rbgggr” 和 “rggbgr”, 第二个就是绕着Z轴顺时针旋转90度与第一个相同的骰子. ...
- UVA 253 Cube painting
大致题意:有三种颜色,一个立方体6面都可以涂一种颜色.现在给出两个每个面都涂好颜色的立方体,判断这两个立方体通过旋转是否相等. 立方体的旋转出来的结果有很多,首先可以0,1,2,3,4,5(顺序是:上 ...
- UVa 253 Cube paiting
题意:输入两个骰子,判断是否等价 因为每一个面可以作顶面,共6*4种情况,枚举就可以了 #include<iostream> #include<cstdio> #include ...
- UVA.12716 GCD XOR (暴力枚举 数论GCD)
UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...
- ACM/ICPC 之 暴力打表(求解欧拉回路)-编码(POJ1780)
///找到一个数字序列包含所有n位数(连续)一次且仅一次 ///暴力打表 ///Time:141Ms Memory:2260K #include<iostream> #include< ...
- UVA 253 (13.08.06)
Cube painting We have a machine for painting cubes. It is supplied withthree different colors: blu ...
- XTU OJ 1210 Happy Number (暴力+打表)
Problem Description Recently, Mr. Xie learn the concept of happy number. A happy number is a number ...
- 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用
转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...
随机推荐
- JavaWeb学习记录(九)——Cookie的增加、删除、查看
一.servlet功能代码: public void doGet(HttpServletRequest request, HttpServletResponse response) ...
- scala言语基础学习十
类型参数 泛型函数 多个参数 使用泛型参数时候,不给类型scala也能自己判断 上边界bounds 下边界bounds 专门用于打包泛型数组
- 配置DNS
1.将DNS解析服务器添加到:/etc/resolv.conf 2.打开DNS相关配置:sed -i 's/^hosts:[ \t]*files[ \t]*$/& dns/' /etc/nss ...
- Kali安装
Kali Linux 前身是 BackTrack ,不过Kali Linux是基于Debian 的 Linux 发行版,而BackTrack 则是基于Uubntu的,现在BackTrack 已经不更新 ...
- Fixing Poor MySQL Default Configuration Values
I've recently been accumulating some MySQL configuration variables that have defaults which have pro ...
- InnoDB Plugin文件格式(概述)
本文将介绍InnoDB Plugin数据表格式的基本概念. 1. 配置参数innodb_file_format 这是一个很容易混淆的概念.目前,在InnoDB Plugin(1.0.6)配置文件中in ...
- shell中[[]]和[]的主要区别
[ ] 实际上是bash 中 test 命令的简写.即所有的 [ expr ] 等于 test expr 对 test 命令来说, 用 -eq 要进行数字比较,而你此时传入字符串,就报错了. [[ e ...
- java-源码下载
jdk7 下载: http://download.java.net/openjdk/jdk7/ jdk8 下载: http://download.java.net/openjdk/jdk8/
- media type与media query
media type(媒体类型)是css 2中的一个非常有用的属性,通过media type我们可以对不同的设备指定特定的样式,从而实现更丰富的界面.media query(媒体查询)是对media ...
- #linux包之psmisc之fuser命令
概述 [root@localhost ~]# rpm -qf /sbin/fuserpsmisc-22.6-15.el6_0.1.x86_64 先说 fuser的作用,fuser能识别出正在对某个文件 ...