链接:http://acm.hdu.edu.cn/showproblem.php?pid=5983
题意:给你个魔方,问能否一步之内把他还原。哎。。。写了半天,标号后一步步来,我真tm菜。
#include <cstdio>
#include <map>
#define ll long long
using namespace std;
int a[30];
map<int,int> mp;
int rot[6][24]={
{1,2,3,4,9,10,11,12,21,23,7,8,5,6,17,19,18,20,13,14,15,16,22,24},
{1,2,3,4,9,10,11,12,18,20,7,8,5,6,22,24,21,23,13,14,15,16,17,19},
{5,6,7,8,13,14,15,16,1,2,23,24,9,10,21,22,11,12,19,20,17,18,3,4},
{5,6,7,8,13,14,15,16,1,2,19,20,21,22,3,4,23,24,11,12,9,10,17,18},
{17,18,19,20,21,22,23,24,5,7,2,4,9,11,6,8,13,15,10,12,1,3,14,16},
{17,18,19,20,21,22,23,24,1,3,6,8,5,7,10,12,9,11,14,16,13,15,2,4}
};
int judge(int cur){
for(int i=0;i<24;i+=4){
for(int j=1;j<4;j++){
if(a[rot[cur][i]]!=a[rot[cur][i+j]]){
return 0;
}
}
}
return 1;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
bool flag=1;
for(int i=1;i<=24;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=24;i+=4){
for(int j=1;j<4;j++){
if(a[i]!=a[i+j]){
flag=0;
break;
}
}
}
if(flag){
puts("YES");
continue;
}
for(int i=0;i<6;i++){
if(judge(i)){
flag=1;
break;
}
}
puts(flag?"YES":"NO");
}
return 0;
}