253 - Cube painting

/*

经过证明,最少只需通过2次旋转就能得到所有12种排列情况,因此不必考虑过多,只要能够保证对面不变且存在即可

一开始只考虑一次旋转的情形,一次wa后恍然大悟,原wa代码如下:

#include<stdio.h>
#include<string.h>
int main()
{
 char cube1[7],cube2[7],cube[12];
 int i;
 while(scanf("%s",cube)!=EOF)
 {
  for(i=0;i<6;i++)
   cube1[i]=cube[i];
  cube1[i]='\0';
  while(i<12)
   cube2[i-6]=cube[i++];
  cube2[6]='\0';
  printf("%s\n%s\n",cube1,cube2);
  if(strcmp(cube1,cube2)==0)
  {
   printf("TRUE\n");
   continue;
  }
  if(cube1[0]==cube2[0]&&cube1[5]==cube2[5])
  {
   if(cube1[1]==cube2[4]&&cube1[2]==cube2[3]&&cube1[3]==cube2[2]&&cube1[4]==cube2[1])
   {
    printf("TRUE\n");
    continue;
   }
   if(cube1[1]==cube2[2]&&cube1[2]==cube2[4]&&cube1[3]==cube2[1]&&cube1[4]==cube2[3])
   {
    printf("TRUE\n");
    continue;
   }
   if(cube1[1]==cube2[3]&&cube1[2]==cube2[1]&&cube1[3]==cube2[4]&&cube1[4]==cube2[2])
   {
    printf("TRUE\n");
    continue;
   }
  }
  if(cube1[1]==cube2[1]&&cube1[4]==cube2[4])
  {
   if(cube1[0]==cube2[2]&&cube1[2]==cube2[5]&&cube1[3]==cube2[0]&&cube1[5]==cube2[3])
   {
    printf("TRUE\n");
    continue;
   }
   if(cube1[0]==cube2[3]&&cube1[2]==cube2[0]&&cube1[3]==cube2[5]&&cube1[5]==cube2[2])
   {
    printf("TRUE\n");
    continue;
   }
   if(cube1[0]==cube2[5]&&cube1[2]==cube2[3]&&cube1[3]==cube2[2]&&cube1[5]==cube2[0])
   {
    printf("TRUE\n");
    continue;
   }
  }
  if(cube1[2]==cube2[2]&&cube1[3]==cube2[3])
  {
   if(cube1[0]==cube2[1]&&cube1[1]==cube2[5]&&cube1[4]==cube2[0]&&cube1[5]==cube2[4])
   {
    printf("TRUE\n");
    continue;
   }
   if(cube1[0]==cube2[4]&&cube1[1]==cube2[0]&&cube1[4]==cube2[5]&&cube1[5]==cube2[1])
   {
    printf("TRUE\n");
    continue;
   }
   if(cube1[0]==cube2[5]&&cube1[1]==cube2[4]&&cube1[4]==cube2[1]&&cube1[5]==cube2[0])
   {
    printf("TRUE\n");
    continue;
   }
  }
  printf("FALSE\n");
 }
 return 0;
}

下面是ac码:

*/

#include<stdio.h>
int main()
{
 char cube1[7],cube2[7],cube[12];
 int i,j,flag,found;
 while(scanf("%s",cube)!=EOF)
 {
  for(i=0;i<6;i++)
   cube1[i]=cube[i];
  flag=0;
  while(i<12)
   cube2[i-6]=cube[i++];
  for(i=0;i<3;i++)
  {
   found=0;
   for(j=0;j<6;j++)
   {
    if(cube1[i]==cube2[j]&&cube1[5-i]==cube2[5-j])
    {
     found=1;
     cube2[j]='0';
     cube2[5-j]='0';
     break;
    }
   }
   if(!found)
    break;
  }
  if(!found)
  {
   printf("FALSE\n");
   continue;
  }
  printf("TRUE\n");
 }
 return 0;
}

你可能感兴趣的:(paint)