2013 ACM区域赛长沙 K Pocket Cube hdu 4801
生活随笔
收集整理的這篇文章主要介紹了
2013 ACM区域赛长沙 K Pocket Cube hdu 4801
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?題意:給了一個2*2的魔方..每步操作可以將任意一面翻轉90度..現在問在N(<=7)步內.最多能翻出幾面相同的.
直接打表模擬每種翻轉情況
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 7 int B[6][24]= { {6,1,12,3,5,11,16,7,8,9,4,10,18,13,14,15,20,17,22,19,0,21,2,23}, //ok 8 {20,1,22,3,10,4,0,7,8,9,11,5,2,13,14,15,6,17,12,19,16,21,18,23}, //ok 9 {1,3,0,2,23,22,4,5,6,7,10,11,12,13,14,15,16,17,18,19,20,21,9,8}, //ok 10 {2,0,3,1,6,7,8,9,23,22,10,11,12,13,14,15,16,17,18,19,20,21,5,4}, //ok 11 {0,1,8,14,4,3,7,13,17,9,10,2,6,12,16,15,5,11,18,19,20,21,22,23}, //ok 12 {0,1,11,5,4,16,12,6,2,9,10,17,13,7,3,15,14,8,18,19,20,21,22,23} //ok 13 }; 14 int ans=0; 15 void update(int *h) { 16 int sum=0; 17 if (h[0]==h[1] && h[1]==h[2] && h[2]==h[3]) sum++; 18 if (h[4]==h[5] && h[5]==h[10] && h[10]==h[11]) sum++; 19 if (h[6]==h[7] && h[7]==h[12] && h[12]==h[13]) sum++; 20 if (h[8]==h[9] && h[9]==h[14] && h[14]==h[15]) sum++; 21 if (h[16]==h[17] && h[17]==h[18] && h[18]==h[19]) sum++; 22 if (h[20]==h[21] && h[21]==h[22] && h[22]==h[23]) sum++; 23 ans=max(ans,sum); 24 } 25 void dfs(int N,int *h) { 26 update(h); 27 if(N==0) return; 28 int p[24]; 29 for(int i=0; i<6; i++) { 30 for(int j=0; j<24; j++) { 31 p[j]=h[B[i][j]]; 32 } 33 dfs(N-1,p); 34 } 35 return; 36 } 37 int main() { 38 int n; 39 while(~scanf("%d",&n)) { 40 int p[25]; 41 ans=0; 42 for(int i=0; i<24; i++) 43 scanf("%d",&p[i]); 44 dfs(n,p); 45 printf("%d\n",ans); 46 } 47 } View Code?
轉載于:https://www.cnblogs.com/ITUPC/p/5326839.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的2013 ACM区域赛长沙 K Pocket Cube hdu 4801的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能测试:竞品APP性能对比测试
- 下一篇: 常见的getchar 与EOF的问题