hdu Pocket Cube(结论题)

题意:给出一个二阶魔方的状态,求是否能还原;

参考: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;
}

 

posted @ 2015-07-22 10:20  dominating  Views(232)  Comments(0)    收藏  举报