魔方大师
給定一個二階魔方,判斷其是否能在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; } } } } }?
總結
- 上一篇: 腾讯编程比赛的试题,喜欢企鹅和编程的要进
- 下一篇: 产品经理究竟是干嘛的