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(暴力打表)的更多相关文章

  1. uva 253 - Cube painting(相同骰子)

    习题4-4 骰子涂色(Cube painting, UVa 253) 输入两个骰子,判断二者是否等价.每个骰子用6个字母表示,如图4-7所示. 图4-7 骰子涂色 例如rbgggr和rggbgr分别表 ...

  2. UVA 253 Cube painting(枚举 模拟)

    题意: 按如图的顺序给定2个骰子的颜色(只有r.b.g三种颜色) 问2个骰子是否一模一样 如 可表示为“rbgggr” 和 “rggbgr”, 第二个就是绕着Z轴顺时针旋转90度与第一个相同的骰子. ...

  3. UVA 253 Cube painting

    大致题意:有三种颜色,一个立方体6面都可以涂一种颜色.现在给出两个每个面都涂好颜色的立方体,判断这两个立方体通过旋转是否相等. 立方体的旋转出来的结果有很多,首先可以0,1,2,3,4,5(顺序是:上 ...

  4. UVa 253 Cube paiting

    题意:输入两个骰子,判断是否等价 因为每一个面可以作顶面,共6*4种情况,枚举就可以了 #include<iostream> #include<cstdio> #include ...

  5. UVA.12716 GCD XOR (暴力枚举 数论GCD)

    UVA.12716 GCD XOR (暴力枚举 数论GCD) 题意分析 题意比较简单,求[1,n]范围内的整数队a,b(a<=b)的个数,使得 gcd(a,b) = a XOR b. 前置技能 ...

  6. ACM/ICPC 之 暴力打表(求解欧拉回路)-编码(POJ1780)

    ///找到一个数字序列包含所有n位数(连续)一次且仅一次 ///暴力打表 ///Time:141Ms Memory:2260K #include<iostream> #include< ...

  7. UVA 253 (13.08.06)

     Cube painting  We have a machine for painting cubes. It is supplied withthree different colors: blu ...

  8. XTU OJ 1210 Happy Number (暴力+打表)

    Problem Description Recently, Mr. Xie learn the concept of happy number. A happy number is a number ...

  9. 【ZOJ】3785 What day is that day? ——浅谈KMP在ACM竞赛中的暴力打表找规律中的应用

    转载请声明出处:http://www.cnblogs.com/kevince/p/3887827.html    ——By Kevince 首先声明一下,这里的规律指的是循环,即找到最小循环周期. 这 ...

随机推荐

  1. hdu5441(2015长春赛区网络赛1005)类最小生成树、并查集

    题意:有一张无向图,一些点之间有有权边,某条路径的值等于路径上所有边的边权的最大值,而某个点对的值为这两点间所有路径的值的最小值,给出多个询问,每个询问有一个值,询问有多少点对满足其值小于等于询问值. ...

  2. kuangbin_ShortPath R (HDU 4370)

    出题人真是脑洞堪比黑洞 (然后自己也被吸进去了 理解一遍题意 三个条件可以转化为 1的出度是1, n的入度是1, 2~n-1的出度等于入度 不难发现1-n的最短路符合题意 然而其实还有另一种情况 1为 ...

  3. android开源项目---blog篇

    本文转载于:http://blog.csdn.net/likebamboo/article/details/19081241 主要介绍那些乐于分享并且有一些很不错的开源项目的个人和组织.Follow大 ...

  4. OSGi 的核心配置、动态化及问题

    一.OSGi的核心组件Bundle,与java中jar包的差别就是元数据配置:      常用的Bundle元数据定义:     a) Bundle-Activator:定义Activator的实现全 ...

  5. audition输出参数设置

  6. ABBYY哪些工具和命令可以进行区域校正

    ABBYY FineReader OCR文字识别软件在运行文档识别过程前,会对文档的逻辑结构进行分析,并检测包含文本.图片.表格.条码的区域.程序将通过该分析来确定区域和识别顺序.此信息有助于重建原始 ...

  7. docker 镜像的保存以及导入

    docker 镜像的保存 docker save -o  davename.tar  images docker 镜像的导入 docker  import -  importname < tar ...

  8. Tkinter颜色方案举例

    效果图: 示例代码: # _*_ coding: utf-8 _*_ from Tkinter import * colors = '''#FFB6C1 LightPink 浅粉红 ,#FFC0CB ...

  9. ANDROID中获取STRING.XML,DIMENS.XML等资源文件中的值

    一:是为了国际化,当需要国际化时,只需要再提供一个string.xml文件,把里面的汉子信息都修改为对应的语言(如,English),再运行程序时,android操作系统会根据用户手机的语言环境和国家 ...

  10. SVN的分支、主干合并的使用说明

    EBAPP代码SVN服务器地址:http://scm.jrj.cn/webapp/ 使用右键菜单中SVN的二级菜单Repo-Broswer查看SVN服务器目录结构 目录结构如下: 名称及功能说明: T ...