HDU 4397 - Rubik's Cube

来源:互联网 发布:网络出版许可证查询 编辑:程序博客网 时间:2024/06/10 08:26

 

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4397

 

2012年多校 第10场,1008。

 

模拟题。

 

比赛刚开始就开始敲,敲了一个小时敲好了,交上去WA。

 

于是整个比赛就在调试与纠结中度过。 木有心情做其它题了。。。竟然连模拟都过不了。。。

 

期间怪叔叔各种帮查数据和代码,木有错。

 

赛后看了题解,仍然不知道错在神马地方。。。

 

后来突然想到了,我遗漏一个点,魔方转动是三个颜色一起动的,而我只针对其中一种颜色去模拟,各种纠结。。。

 

改了就过了。。。  代码有点搓比。。。

 

#include<iostream>#include<cstdio>#include<algorithm>#include<cmath>#include<cstring>#include<queue>#include<map>#include<vector>using namespace std;int f[10][13],g[10][13];void init_(){int i,j;for(i=1;i<=3;i++)for(j=1;j<=3;j++)f[i][j]=0;for(i=1;i<=3;i++)for(j=4;j<=6;j++)f[i][j]=1;for(i=1;i<=3;i++)for(j=7;j<=12;j++)f[i][j]=0;for(i=4;i<=6;i++)for(j=1;j<=3;j++)f[i][j]=2;for(i=4;i<=6;i++)for(j=4;j<=6;j++)f[i][j]=3;for(i=4;i<=6;i++)for(j=7;j<=9;j++)f[i][j]=4;for(i=4;i<=6;i++)for(j=10;j<=12;j++)f[i][j]=5;for(i=7;i<=9;i++)for(j=1;j<=3;j++)f[i][j]=0;for(i=7;i<=9;i++)for(j=4;j<=6;j++)f[i][j]=6;for(i=7;i<=9;i++)for(j=7;j<=12;j++)f[i][j]=0;/*for(i=1;i<=9;i++){for(j=1;j<=12;j++)printf("%d ",f[i][j]);printf("\n");}*/}char op[2000];void fU(){int tmp,j,t=3;while(t--){tmp=g[4][1];for(j=1;j<=11;j++)g[4][j]=g[4][j+1];g[4][12]=tmp;}t=2;while(t--){tmp=g[1][4];g[1][4]=g[2][4];g[2][4]=g[3][4];g[3][4]=g[3][5];g[3][5]=g[3][6];g[3][6]=g[2][6];g[2][6]=g[1][6];g[1][6]=g[1][5];g[1][5]=tmp;} }void fu(){int t=3;while(t--) fU();}void fD(){int tmp,j,t=3;while(t--){tmp=g[6][12];for(j=12;j>=2;j--)g[6][j]=g[6][j-1];g[6][1]=tmp;}t=2;while(t--){tmp=g[7][4];g[7][4]=g[8][4];g[8][4]=g[9][4];g[9][4]=g[9][5];g[9][5]=g[9][6];g[9][6]=g[8][6];g[8][6]=g[7][6];g[7][6]=g[7][5];g[7][5]=tmp;}}void fd(){int t=3;while(t--) fD();}void fR(){int tmp,i,t=3;while(t--){tmp=g[1][6];for(i=1;i<=8;i++)g[i][6]=g[i+1][6];g[9][6]=g[6][10];g[6][10]=g[5][10];g[5][10]=g[4][10];g[4][10]=tmp;}t=2;while(t--){tmp=g[4][7];g[4][7]=g[5][7];g[5][7]=g[6][7];g[6][7]=g[6][8];g[6][8]=g[6][9];g[6][9]=g[5][9];g[5][9]=g[4][9];g[4][9]=g[4][8];g[4][8]=tmp;}}void fr(){int t=3;while(t--) fR();}void fL(){int tmp,i,t=3;while(t--){tmp=g[9][4];for(i=9;i>=2;i--)g[i][4]=g[i-1][4];g[1][4]=g[4][12];g[4][12]=g[5][12];g[5][12]=g[6][12];g[6][12]=tmp;}t=2;while(t--){tmp=g[4][1];g[4][1]=g[5][1];g[5][1]=g[6][1];g[6][1]=g[6][2];g[6][2]=g[6][3];g[6][3]=g[5][3];g[5][3]=g[4][3];g[4][3]=g[4][2];g[4][2]=tmp;}}void fl(){int t=3;while(t--) fL();}void ff(){int tmp,t=3;while(t--){tmp=g[3][4];g[3][4]=g[3][5];g[3][5]=g[3][6];g[3][6]=g[4][7];g[4][7]=g[5][7];g[5][7]=g[6][7];g[6][7]=g[7][6];g[7][6]=g[7][5];g[7][5]=g[7][4];g[7][4]=g[6][3];g[6][3]=g[5][3];g[5][3]=g[4][3];g[4][3]=tmp;}t=2;while(t--){tmp=g[4][4];g[4][4]=g[4][5];g[4][5]=g[4][6];g[4][6]=g[5][6];g[5][6]=g[6][6];g[6][6]=g[6][5];g[6][5]=g[6][4];g[6][4]=g[5][4];g[5][4]=tmp;}}void fF(){int t=3;while(t--) ff();}void fB(){int tmp,t=3;while(t--){tmp=g[1][4];g[1][4]=g[1][5];g[1][5]=g[1][6];g[1][6]=g[4][9];g[4][9]=g[5][9];g[5][9]=g[6][9];g[6][9]=g[9][6];g[9][6]=g[9][5];g[9][5]=g[9][4];g[9][4]=g[6][1];g[6][1]=g[5][1];g[5][1]=g[4][1];g[4][1]=tmp;}t=2;while(t--){tmp=g[4][10];g[4][10]=g[5][10];g[5][10]=g[6][10];g[6][10]=g[6][11];g[6][11]=g[6][12];g[6][12]=g[5][12];g[5][12]=g[4][12];g[4][12]=g[4][11];g[4][11]=tmp;}}void fb(){int t=3;while(t--) fB();}void fx(){int tmp,j,t=3;while(t--){tmp=g[5][12];for(j=12;j>=2;j--)g[5][j]=g[5][j-1];g[5][1]=tmp;}}void fX(){int tmp,j,t=3;while(t--){tmp=g[5][1];for(j=1;j<=11;j++)g[5][j]=g[5][j+1];g[5][12]=tmp;}}void fY(){int tmp,i,t=3;while(t--){tmp=g[1][5];for(i=1;i<=8;i++)g[i][5]=g[i+1][5];g[9][5]=g[6][11];g[6][11]=g[5][11];g[5][11]=g[4][11];g[4][11]=tmp;}}void fy(){int tmp,i,t=3;while(t--){tmp=g[9][5];for(i=9;i>=2;i--)g[i][5]=g[i-1][5];g[1][5]=g[4][11];g[4][11]=g[5][11];g[5][11]=g[6][11];g[6][11]=tmp;}}void fZ(){int tmp,t=3;while(t--){tmp=g[2][4];g[2][4]=g[2][5];g[2][5]=g[2][6];g[2][6]=g[4][8];g[4][8]=g[5][8];g[5][8]=g[6][8];g[6][8]=g[8][6];g[8][6]=g[8][5];g[8][5]=g[8][4];g[8][4]=g[6][2];g[6][2]=g[5][2];g[5][2]=g[4][2];g[4][2]=tmp;}}void fz(){int t=3;while(t--) fZ();}int res(){int i,j;for(i=1;i<=3;i++)for(j=4;j<=6;j++)if(g[i][j]!=g[1][4]) return 0;for(i=4;i<=6;i++)for(j=1;j<=3;j++)if(g[i][j]!=g[4][1]) return 0;for(i=4;i<=6;i++)for(j=4;j<=6;j++)if(g[i][j]!=g[4][4]) return 0;for(i=4;i<=6;i++)for(j=7;j<=9;j++)if(g[i][j]!=g[4][7]) return 0;for(i=4;i<=6;i++)for(j=10;j<=12;j++)if(g[i][j]!=g[4][10]) return 0;for(i=7;i<=9;i++)for(j=4;j<=6;j++)if(g[i][j]!=g[7][4]) return 0;return 1;}void debug(){int i,j;int k[9]={0};for(i=1;i<=9;i++)for(j=1;j<=12;j++)k[g[i][j]]++;for(i=1;i<=6;i++)if(k[i]!=9) while(1);}int can(){int i,j,k;for(i=0;op[i];i++){if(op[i]=='U') fU();else if(op[i]=='u') fu();else if(op[i]=='D') fD();else if(op[i]=='d') fd();else if(op[i]=='R') fR();else if(op[i]=='r') fr();else if(op[i]=='L') fL();else if(op[i]=='l') fl();else if(op[i]=='F') fF();else if(op[i]=='f') ff();else if(op[i]=='B') fB();else if(op[i]=='b') fb();else if(op[i]=='X') fX();else if(op[i]=='x') fx();else if(op[i]=='Y') fY();else if(op[i]=='y') fy();else if(op[i]=='Z') fZ();else if(op[i]=='z') fz();else while(1) puts("fuck!");}/*for(i=1;i<=9;i++){for(j=1;j<=12;j++)printf("%d ",g[i][j]);printf("\n");}debug();*///return res();for(i=1;i<=9;i++)for(j=1;j<=12;j++)if(f[i][j]!=g[i][j]) return 0;return 1;}void cpy(){int i,j;for(i=1;i<=9;i++)for(j=1;j<=12;j++)g[i][j]=f[i][j];}int main(){int flag=0;init_();while(~scanf("%s",op)){cpy();if(flag!=0) puts("");else flag=1;if(can()) puts("Yes");else puts("No");}return 0;}/*buBubuuBbuBubuuBbuBubuuBbuBubuuBbuBubuuBbuBubuuBuUldLdlddLldLdlddLldLdlddLldLdlddLldLdlddLldLdlddL*/