http://acm.hdu.edu.cn/showproblem.php?pid=5983
给出2*2魔方的6个面,问能否在1次90度转动之内将魔方复原。
码农题,因为拧2*2魔方一次只有6种可能,所以只要写6遍数字的转换,再写一个判断即可。
#include<bits/stdc++.h>
using namespace std;
int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x;
int a1,b1,c1,d1,e1,f1,g1,h1,i1;
int lss,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,u1,v1,w1,x1;bool flag;
void check()
{
if(a1==b1&&b1==c1&&c1==d1&&e1==f1&&f1==g1&&g1==h1&&i1==lss&&lss==k1&&k1==l1&&m1==n1&&n1==o1&&o1==p1&&q1==r1&&r1==s1&&s1==t1&&u1==v1&&v1==w1&&w1==x1)
flag=1;
}
int main(){
int T;
cin>>T;
while(T--)
{
flag=0;
cin>>a>>b>>c>>d>>e>>f>>g>>h>>i>>j>>k>>l>>m>>n>>o>>p>>q>>r>>s>>t>>u>>v>>w>>x;
a1=a,b1=b,c1=c,d1=d,e1=e,f1=f,g1=g,h1=h,i1=i,lss=j,k1=k,l1=l,m1=m,n1=n,o1=o,p1=p,q1=q,r1=r,s1=s,t1=t,u1=u,v1=v,w1=w,x1=x;
check();
swap(a1,m1);
swap(a1,e1);
swap(e1,i1);
swap(c1,o1);
swap(g1,c1);
swap(k1,g1);
check();
a1=a,b1=b,c1=c,d1=d,e1=e,f1=f,g1=g,h1=h,i1=i,lss=j,k1=k,l1=l,m1=m,n1=n,o1=o,p1=p,q1=q,r1=r,s1=s,t1=t,u1=u,v1=v,w1=w,x1=x;
swap(e1,i1); swap(a1,e1); swap(a1,m1); swap(k1,g1); swap(g1,c1); swap(c1,o1);
check();
a1=a,b1=b,c1=c,d1=d,e1=e,f1=f,g1=g,h1=h,i1=i,lss=j,k1=k,l1=l,m1=m,n1=n,o1=o,p1=p,q1=q,r1=r,s1=s,t1=t,u1=u,v1=v,w1=w,x1=x;
swap(u1,o1);
swap(u1,f1);
swap(f1,t1);
swap(w1,p1);
swap(e1,w1);
swap(r1,e1);
check();
a1=a,b1=b,c1=c,d1=d,e1=e,f1=f,g1=g,h1=h,i1=i,lss=j,k1=k,l1=l,m1=m,n1=n,o1=o,p1=p,q1=q,r1=r,s1=s,t1=t,u1=u,v1=v,w1=w,x1=x;
swap(f1,t1); swap(u1,f1); swap(u1,o1); swap(r1,e1); swap(e1,w1); swap(w1,p1);
check();
a1=a,b1=b,c1=c,d1=d,e1=e,f1=f,g1=g,h1=h,i1=i,lss=j,k1=k,l1=l,m1=m,n1=n,o1=o,p1=p,q1=q,r1=r,s1=s,t1=t,u1=u,v1=v,w1=w,x1=x;
swap(s1,i1);
swap(s1,c1);
swap(c1,w1);
swap(t1,lss);
swap(d1,t1);
swap(x1,d1);
check();
a1=a,b1=b,c1=c,d1=d,e1=e,f1=f,g1=g,h1=h,i1=i,lss=j,k1=k,l1=l,m1=m,n1=n,o1=o,p1=p,q1=q,r1=r,s1=s,t1=t,u1=u,v1=v,w1=w,x1=x;
swap(c1,w1); swap(s1,c1); swap(s1,i1); swap(x1,d1); swap(d1,t1); swap(t1,lss);
check();
if(flag)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}