题意:给出一个二阶魔方的状态,求是否能还原;
参考:http://blog.csdn.net/squee_spoon/article/details/46990969(郑大cuber)
思路:一个二阶魔方的相邻角块交换情况如下图;
将终状态的每个方块赋值,旋转后权值不会变化;
考虑题干中黄白为对立面,将其权值赋0;
顺时针赋1,否则-1;
若黄白块的权值和被三整除,可还原;否则不可还原;
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int t,n,m,ans; char str[30]; int mark[]={1,-1,-1,1,-1,1,0,0,-1,1,1,-1,0,0,1,-1,1,-1,-1,1,0,0,0,0}; int main() { int i,j,k,cas; scanf("%d",&t); for(cas=1;cas<=t;cas++) { ans=0; for(i=0;i<24;i++) { scanf("%s",str); if(str[0]==‘w‘||str[0]==‘y‘){ ans+=mark[i]; } } printf("Case #%d: ",cas); if(ans%3==0) printf("YES\n"); else printf("NO\n"); } return 0; }
时间: 2024-12-26 16:35:08