hdu Pocket Cube(结论题)

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

参考:http://blog.csdn.net/squee_spoon/article/details/46990969(郑大cuber)

思路:一个二阶魔方的相邻角块交换情况如下图;

         将终状态的每个方块赋值,旋转后权值不会变化;

        考虑题干中黄白为对立面,将其权值赋0;

         顺时针赋1,否则-1;

        若黄白块的权值和被三整除,可还原;否则不可还原;

hdu Pocket Cube(结论题)

#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;

}

 

你可能感兴趣的:(cube)