题目链接。
分析:
用的《训练指南》上的方法。详见P17.
从6个面中选一个做顶面,再从剩下的4个面中选1个做正面,则此正方体唯一确定。
需要枚举共6*4=24种。
#include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <algorithm> #include <vector> #include <map> #include <cstring> using namespace std; const int maxn = 1000; int _left[6] = {4, 0, 2, 3, 5, 1}; int up[6] = {2, 1, 5, 0, 4, 3}; char s1[maxn], s2[maxn], s[maxn]; void rot(int *T, char *str) { char t[maxn]; strcpy(t, str); for(int i=0; i<6; i++) str[i] = t[T[i]]; } bool check() { char t[maxn]; for(int i=0; i<6; i++) { strcpy(t, s1); if(i == 0) rot(up, t); else if(i == 1) { rot(_left, t); rot(up, t); } else if(i == 3) { rot(up, t); rot(up, t); } else if(i == 4) { rot(_left, t); rot(_left, t); rot(up, t); } else if(i == 5) { rot(_left, t); rot(_left, t); rot(_left, t); rot(up, t); } for(int i=0; i<4; i++) { rot(_left, t); if(strcmp(s2, t) == 0) return 1; } } return 0; } int main() { while(gets(s)) { for(int i=0; i<6; i++) s1[i] = s[i]; s1[6] = '