魔方大师

给定一个二阶魔方,判断其是否能在1步90度的旋转之内复原。

二阶魔方的定义可以在这里查到。

输入描述

输入数据第一行为一个整数​ T [1,50],表示用例组数。

接下来​ T 行,每行包含​ 24 个整数,其中第 i ​个格子表示下图中编号为 i ​的格子的颜色,颜色的范围为 [1,6]​。数据保证每种颜色只会出现 4 ​次。

魔方拆分图

输出描述

对于每组用例,输出共1行,为YESNO

  测试输入关于“测试输入”的帮助 期待的输出关于“期待的输出”的帮助 时间限制关于“时间限制”的帮助 内存限制关于“内存限制”的帮助 额外进程关于“{$a} 个额外进程”的帮助
测试用例 1 以文本方式显示
  1. 1↵
  2. 3 4 2 3 5 5 6 6 4 5 4 6 5 1 1 1 6 2 1 3 3 2 4 2↵
以文本方式显示
  1. NO↵
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;  
                }  
            }  
        }  
    }  
}  
发布了19 篇原创文章 · 获赞 1 · 访问量 163

猜你喜欢

转载自blog.csdn.net/CN_BIT/article/details/104652253