给定一个二阶魔方,判断其是否能在1步90度的旋转之内复原。
二阶魔方的定义可以在这里查到。
输入描述
输入数据第一行为一个整数 T [1,50],表示用例组数。
接下来 T 行,每行包含 24 个整数,其中第 i 个格子表示下图中编号为 i 的格子的颜色,颜色的范围为 [1,6]。数据保证每种颜色只会出现 4 次。
输出描述
对于每组用例,输出共1行,为YES
或NO
。
测试输入 |
期待的输出 |
时间限制 |
内存限制 |
额外进程 |
|
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
|
以文本方式显示
|
1秒 | 64M | 0 |
#include<stdio.h>
#include<stdlib.h>
int main(){
int t;
scanf("%d",&t);
int a[25],q=0,w=0,e=0;
while(t--)
{
q=0,w=0,e=0;
for(int i=1;i<=24;++i) scanf("%d",&a[i]);
if(a[1]+a[2]+a[3]+a[4]==a[1]*3+a[2] && a[9]+a[10]+a[11]+a[12]==a[9]*3+a[10]) q = 1;
if(a[13]+a[14]+a[15]+a[16]==a[13]*3+a[14] && a[17]+a[18]+a[19]+a[20]==a[17]*3+a[18]) w = 1;
if(a[5]+a[6]+a[7]+a[8]==a[5]*3+a[6] && a[21]+a[22]+a[23]+a[24]==a[21]*3+a[22]) e = 1;
if(q+w+e==3)
{
printf("YES\n");
continue;
}
else if(q+w+e==2 || q+w+e==0)
{
printf("NO\n");
continue;
}
else
{
if(q==1)
{
if(a[13]==a[14] && a[15]==a[16] && a[5]==a[6] && a[7]==a[8] && a[17]==a[18] && a[19]==a[20] && a[21]==a[22] && a[23]==a[24])
{
if( (a[5]==a[16] && a[17]==a[8] && a[21]==a[20] && a[13]==a[24]) || (a[14]==a[7] && a[6]==a[19] && a[18]==a[23] && a[22]==a[15]))
{
printf("YES\n");
continue;
}
else
{
printf("NO\n");
continue;
}
}
else
{
printf("NO\n");
continue;
}
}
if(w==1)
{
if(a[2]==a[4] && a[1]==a[3] && a[6]==a[8] && a[5]==a[7] && a[10]==a[12] && a[9]==a[11])
{
if((a[6]==a[3] && a[10]==a[7] && a[23]==a[11] && a[2]==a[22]) || (a[4]==a[5] && a[8]==a[9] && a[12]==a[24] && a[21]==a[1]))
{
printf("YES\n");
continue;
}
else
{
printf("NO\n");
continue;
}
}
else
{
printf("NO\n");
continue;
}
}
if(e==1)
{
if(a[3]==a[4] && a[2]==a[1] && a[14]==a[16] && a[13]==a[15] && a[9]==a[10] && a[11]==a[12] && a[19]==a[17] && a[18]==a[20])
{
if((a[14]==a[1] && a[9]==a[15] && a[19]==a[12] && a[4]==a[18]) || (a[3]==a[13] && a[16]==a[11] && a[10]==a[20] && a[17]==a[2]))
{
printf("YES\n");
continue;
}
else
{
printf("NO\n");
continue;
}
}
else
{
printf("NO\n");
continue;
}
}
}
}
}