题目描述
在棋盘上跳舞是件有意思的事情。现在给你一张国际象棋棋盘和棋盘上的一些子以及你的初始位置和方向。求按一定操作后,棋盘的状态。
操作有四种,描述如下:
move n n是非负整数,表示你按目前所在方向前进n步,如果即将走出棋盘,则停止。如果面前有棋子,则将其向前推一步。
turn left 向左转90度
turn right 向右转90度
turn back 向后转
输入输出格式
输入格式:
输入前8行,每行8个字符,给出棋盘状态。“.”表示该格为空,字母表示棋子,不同字母表示不同的棋子。你所在位置用“^”、“<”、“>”、“v”四个字母中一个表示,分别表示你的方向上、左、右、下。
接下来有若干行,每行一个操作。以“#”结束。操作数不超过1000个。
输出格式:
输出8行,每行8个字符,表示经过一系列操作后棋盘和你的状态。表示方法同输入。
输入输出样例
输入样例#1: 复制
......bA .....^.. ........ ........ ........ ........ ........ ........ move 2 turn right move 1 #
输出样例#1: 复制
......>b ........ ........ ........ ........ ........ ........ ........
........ ........
恶心的模拟
#include <cstring> #include <cstdio> int f,x,y; bool flag; char opt[15],g[15][15]; void debug() { for(int i=1;i<=8;++i) for(int j=1;j<=8;++j) j==8?printf("%c ",g[i][j]):printf("%c",g[i][j]); } int main(int argc,char *argv[]) { for(int i=1;i<=8;++i) { scanf("%s",g[i]+1); if(flag) continue; for(int j=1;j<=8;++j) { switch(g[i][j]) { case '^': { f=1; flag=true; x=i,y=j; break; } case 'v': { f=2; flag=true; x=i,y=j; break; } case '>': { f=3; flag=true; x=i,y=j; break; } case '<': { f=4; flag=true; x=i,y=j; break; } default :break; } } } char ch=getchar(); while(1) { gets(opt); if(opt[0]=='m') { if(f==1) { g[x][y]='.'; int step=0,p=5; while(opt[p]>='0'&&opt[p]<='9') step=step*10+opt[p]-'0',p++; while(step&&x>1) { if(g[x-1][y]!='.') { int tx=x; while(g[tx-1][y]!='.'&&tx>1) --tx; --tx; for(int i=tx;i<=x-2;++i) g[i][y]=g[i+1][y],g[i+1][y]='.'; } step--;--x; } if(f==1) g[x][y]='^'; else if(f==2) g[x][y]='v'; else if(f==3) g[x][y]='>'; else if(f==4) g[x][y]='<'; } if(f==2) { g[x][y]='.'; int step=0,p=5; while(opt[p]>='0'&&opt[p]<='9') step=step*10+opt[p]-'0',p++; while(step&&x<8) { if(g[x+1][y]!='.') { int tx=x; while(g[tx+1][y]!='.'&&tx<8) ++tx; ++tx; for(int i=tx;i>=x+2;--i) g[i][y]=g[i-1][y],g[i-1][y]='.'; } step--;++x; } if(f==1) g[x][y]='^'; else if(f==2) g[x][y]='v'; else if(f==3) g[x][y]='>'; else if(f==4) g[x][y]='<'; } if(f==3) { g[x][y]='.'; int step=0,p=5; while(opt[p]>='0'&&opt[p]<='9') step=step*10+opt[p]-'0',p++; while(step&&y<8) { if(g[x][y+1]!='.') { int ty=y; while(g[x][ty+1]!='.'&&ty<8) ++ty; ++ty; for(int i=ty;i>=y+1;--i) g[x][i]=g[x][i-1],g[x][i-1]='.'; } step--;++y; } if(f==1) g[x][y]='^'; else if(f==2) g[x][y]='v'; else if(f==3) g[x][y]='>'; else if(f==4) g[x][y]='<'; } if(f==4) { g[x][y]='.'; int step=0,p=5; while(opt[p]>='0'&&opt[p]<='9') step=step*10+opt[p]-'0',p++; while(step&&y>1) { if(g[x][y-1]!='.') { int ty=y; while(g[x][ty-1]!='.'&&ty>2) --ty; --ty; for(int i=ty;i<=y-2;++i) g[x][i]=g[x][i+1],g[x][i+1]='.'; } step--;--y; } if(f==1) g[x][y]='^'; else if(f==2) g[x][y]='v'; else if(f==3) g[x][y]='>'; else if(f==4) g[x][y]='<'; } } else if(opt[0]=='t') { if(opt[5]=='l') { if(f==1) f=4; else if(f==2) f=3; else if(f==3) f=1; else if(f==4) f=2; } else if(opt[5]=='r') { if(f==1) f=3; else if(f==2) f=4; else if(f==3) f=2; else if(f==4) f=1; } else if(opt[5]=='b') { if(f==1) f=2; else if(f==2) f=1; else if(f==3) f=4; else if(f==4) f=3; } } else if(opt[0]=='#') break; if(f==1) g[x][y]='^'; else if(f==2) g[x][y]='v'; else if(f==3) g[x][y]='>'; else if(f==4) g[x][y]='<'; } for(int i=1;i<=8;++i) for(int j=1;j<=8;++j) j==8?printf("%c ",g[i][j]):printf("%c",g[i][j]); return 0; }