#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>

using namespace std;

int main(void)
{
char a[13], c1[6], c2[6];
#ifndef ONLINE_JUDGE
freopen("in", "r", stdin);
#endif
while (cin>>a)
{
int i, j = 0;
for (i = 0; i < 6; i++) { c1[i] = a[i]; c2[i] = a[i+6]; }
int mrk;
for (i = 0; i < 3; i++)
{
mrk = 0;
for (j = 0; j < 6; j++)
{
if (c1[i]==c2[j] && c1[5-i]==c2[5-j])
{
mrk = 1; c2[j] = '0'; c2[5-j] = '0'; break;
}
}
if (!mrk) break;
}
if (!mrk) cout << "FALSE" << endl;
else cout << "TRUE" << endl;
}

return 0;
}


这道题目开始没想通,去看别人的代码,网上有很多人用的暴力,只看到一个很犀利的想法,如下:

设两个正方体是 c1, c2, 保持 c1 不变,枚举 c1 的相邻的三个面,和 c2 的6个面依次对比,如果这个面和其中一个面相同,并且这两个面的对面也对应相同,那么就把 c2 的这两个面标记为字符 ‘0’ ,防止以后再次用到这两个面。如果对于 c1 的这三个面的其中一个面,在 c2 中找不到符合条件(即两个面相同并且对面也相同)的,就退出循环,说明这两个正方体不相同,否则,这两个正方体相同。

唉,不愧是大牛的想法,ORZ…………