求差错

P2033 Chessboard Dance

是“查错”
by Drinkkk @ 2017-10-16 21:27:35


修改后48分,求教~ ```cpp #include <cstdio> #include <cstring> char ma[101][101]; char st[10001]; int dx=0,dy=0; void push(char str,int num) { for(int i=1;i<=num;i++) { for(int j=1;j<=8;j++) { ma[0][j]='.'; ma[j][0]='.'; } if(str=='^') { if(ma[dx-1][dy]=='.' && dx-1>=1) { ma[dx-1][dy]='^'; ma[dx][dy]='.'; dx--; } else { if(dx-1<1) { continue; } int nx=dx-1,ny=dy; while(ma[nx][ny]!='.') { nx--; } if(nx<1) { nx=1; } for(int j=nx;j<=dx;j++) { // printf("j=%d\n",j); ma[j-1][ny]=ma[j][ny]; } ma[dx][dy]='.'; dx--; } } else if(str=='v') { if(ma[dx+1][dy]=='.' && dx+1<=8) { ma[dx+1][dy]='v'; ma[dx][dy]='.'; dx++; } else { if(dx+1>8) { continue; } int nx=dx+1,ny=dy; while(ma[nx][ny]!='.') { nx++; } if(nx>8) { nx=8; } for(int j=nx;j>=dx;j--) { // printf("j=%d\n",j); ma[j+1][ny]=ma[j][ny]; } ma[dx][dy]='.'; dx++; } } else if(str=='<') { if(ma[dx][dy-1]=='.' && dy-1>=1) { ma[dx][dy-1]='<'; ma[dx][dy]='.'; dy--; } else { if(dy-1<1) { continue; } int nx=dx,ny=dy-1; while(ma[nx][ny]!='.') { ny--; } if(ny<1) { ny=1; } for(int j=ny;j<=dy;j++) { // printf("j=%d\n",j); ma[nx][j-1]=ma[nx][j]; } ma[dx][dy]='.'; dy--; } } else if(str=='>') { if(ma[dx][dy+1]=='.' && dy+1<=8) { ma[dx][dy+1]='>'; ma[dx][dy]='.'; dy++; } else { if(dy+1>8) { continue; } int nx=dx,ny=dy+1; while(ma[nx][ny]!='.') { ny++; } if(ny>8) { ny=8; } for(int j=ny;j>=dy;j--) { // printf("j=%d\n",j); ma[nx][j+1]=ma[nx][j]; } ma[dx][dy]='.'; dy++; } } } } int main() { for(int i=1;i<=8;i++) { scanf("%s",ma[i]+1); } for(int i=1;i<=8;i++) { bool bj=false; for(int j=1;j<=8;j++) { if(ma[i][j]=='^' || ma[i][j]=='<' || ma[i][j]=='>' || ma[i][j]=='v') { dx=i; dy=j; bj=true; break; } } if(bj==true) { break; } } while(true) { int flag=-999999999,number=0,len=0; gets(st+1); if(st[1]=='#') { break; } len=strlen(st+1); for(int i=1;i<=len;i++) { if(st[i]=='m' && st[i+1]=='o' && st[i+2]=='v' && st[i+3]=='e') { flag=1; break; } if(st[i]=='t' && st[i+1]=='u' && st[i+2]=='r' && st[i+3]=='n') { for(int j=i+(3+1);j<=len;j++) { if(st[j]=='l' && st[j+1]=='e' && st[j+2]=='f' && st[j+3]=='t') { flag=2; } if(st[j]=='r' && st[j+1]=='i' && st[j+2]=='g' && st[j+3]=='h' && st[j+4]=='t') { flag=3; } if(st[j]=='b' && st[j+1]=='a' && st[j+2]=='c' && st[j+3]=='k') { flag=4; } } } } if(flag==1) { for(int i=1;i<=len;i++) { if(st[i]>='0' && st[i]<='9') { number=number*10+st[i]-'0'; } } } //printf("flag=%d\n",flag); if(flag==1) { push(ma[dx][dy],number); } else if(flag>=2 && flag<=4) { if(flag==2) { if(ma[dx][dy]=='^') { ma[dx][dy]='<'; } else if(ma[dx][dy]=='v') { ma[dx][dy]='>'; } else if(ma[dx][dy]=='<') { ma[dx][dy]='v'; } else if(ma[dx][dy]=='>') { ma[dx][dy]='^'; } } else if(flag==3) { if(ma[dx][dy]=='^') { ma[dx][dy]='>'; } else if(ma[dx][dy]=='v') { ma[dx][dy]='<'; } else if(ma[dx][dy]=='<') { ma[dx][dy]='^'; } else if(ma[dx][dy]=='>') { ma[dx][dy]='v'; } } else if(flag==4) { if(ma[dx][dy]=='^') { ma[dx][dy]='v'; } else if(ma[dx][dy]=='v') { ma[dx][dy]='^'; } else if(ma[dx][dy]=='<') { ma[dx][dy]='>'; } else if(ma[dx][dy]=='>') { ma[dx][dy]='<'; } } } // for(int i=1;i<=8;i++) // { // for(int j=1;j<=8;j++) // { // printf("%c",ma[i][j]); // } // printf("\n"); // } } for(int i=1;i<=8;i++) { for(int j=1;j<=8;j++) { printf("%c",ma[i][j]); } printf("\n"); } //printf("dx=%d,dy=%d\n",dx,dy); return 0; } ``` /\* .....c.. .p..A..t D..>T.Pr ....aP.P p.d.C... .....p.R ........ ........ move 2 turn right move 3 turn left turn left move 1 # \*/
by Drinkkk @ 2017-10-18 07:52:45


想问一下各位,为什么测试点2 RE,自测又没事?
by Drinkkk @ 2017-10-18 14:02:46


$T$$1$$T$
by Drinkkk @ 2017-11-07 12:36:01


$T$$1$
by Drinkkk @ 2017-11-07 12:36:28


|