HDU 5983 Pocket Cube(模擬)

鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5983

題意:給你個魔方,問能否一步之內把他還原。哎。。。寫了半天,標號後一步步來,我真tm菜。

#include <cstdio>
#include <map>
#define ll long long
using namespace std;
int a[30];
map<int,int> mp;
int rot[6][24]={
{1,2,3,4,9,10,11,12,21,23,7,8,5,6,17,19,18,20,13,14,15,16,22,24},
{1,2,3,4,9,10,11,12,18,20,7,8,5,6,22,24,21,23,13,14,15,16,17,19},
{5,6,7,8,13,14,15,16,1,2,23,24,9,10,21,22,11,12,19,20,17,18,3,4},
{5,6,7,8,13,14,15,16,1,2,19,20,21,22,3,4,23,24,11,12,9,10,17,18},
{17,18,19,20,21,22,23,24,5,7,2,4,9,11,6,8,13,15,10,12,1,3,14,16},
{17,18,19,20,21,22,23,24,1,3,6,8,5,7,10,12,9,11,14,16,13,15,2,4}
};
int judge(int cur){
    for(int i=0;i<24;i+=4){
        for(int j=1;j<4;j++){
            if(a[rot[cur][i]]!=a[rot[cur][i+j]]){
            return 0;
            }
        }
    }
    return 1;
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--){
        bool flag=1;
        for(int i=1;i<=24;i++){
          scanf("%d",&a[i]);
        }
        for(int i=1;i<=24;i+=4){
          for(int j=1;j<4;j++){
             if(a[i]!=a[i+j]){
                flag=0;
                break;
             }
          }
        }
        if(flag){
            puts("YES");
            continue;
        }
        for(int i=0;i<6;i++){
            if(judge(i)){
                flag=1;
                break;
            }
        }
        puts(flag?"YES":"NO");
    }
    return 0;
}

 

發佈了247 篇原創文章 · 獲贊 16 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章