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
分析:
只要检查每个面的对面是否跟原来的面一样,如果是,则两个色子等价
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char cube[15];
int show[15];
int check(int x, int y) {
char c1 = cube[x];
char c2 = cube[y];
if(((cube[6] == c1 && cube[11] == c2) || (cube[11] == c1 && cube[6] == c2)) && !show[6] && !show[11]) {
show[6] = show[11] = 1;
return 1;
} else if(((cube[7] == c1 && cube[10] == c2) || (cube[10] == c1 && cube[7] == c2)) && !show[7] && !show[10]) {
show[7] = show[10] = 1;
return 1;
} else if(((cube[8] == c1 && cube[9] == c2) || (cube[9] == c1 && cube[8] == c2)) && !show[8] && !show[9]) {
show[8] = show[9] = 1;
return 1;
}
return 0;
}
int main()
{
while(scanf("%s", cube) != EOF) {
getchar();
memset(show, 0, sizeof(show));
if( check(0, 5) && check(1, 4) && check(2, 3 ))
printf("TRUE\n");
else
printf("FALSE\n");
}
return 0;
}