最近有一部电视剧非常火,其中有一段剧情是主人公在一个没有办法看清任何货物的仓库中 盲跑,也就是凭记忆去确认自己的位置并且走到自己想要去的地方。
gsy 最近也想试试自己的记忆力,于是她找到了一个类似的游戏。
这个游戏一开始会给玩家看一份 n∗m 的地图,地图中 '*' 表示墙,'.' 表示空地,'#' 表示玩家所在的位置,当然玩家一开始所在的位置必然也是一个空地
但是一旦玩家开始移动,地图就会变黑不可见,也就是玩家没有办法知道自己的角色现在处于哪个位置,直到移动了 1001 次以后,地图才会重新显示
这个游戏一共有四种操作:
- U 向上走一步
- L 向左走一步
- D 向下走一步
- R 向右走一步
但是显然,如果 gsy 希望的下一个步骤会到达墙或者地图边界,则这一步会被跳过
比如当地图为
*#
..
此时下达的操作为 LRD, 因为左边是墙右边是递推边界所以 LR 两次操作是无效的
三次操作以后地图则会变成
*.
.#
现在 gsy 已经走了 p 步,但是她只记得自己进行过哪些操作,但是不知道自己到底走到哪了,于是她想向你求助。
请你告诉 gsy 现在的地图是什么样的。
Input第一行包含三个正整数 n,m,p 表示地图大小为 n∗m,gsy 已经走了 p 步 接下来 n 行,每行包含 m 个字符,字符含义如题所示 接下来包含一行,共 p 个字符,每个字符表示 gsy 的一次操作,题目保证只会出现 U,L,D,R 这四个字符。
对于 60% 的数据,n,m≤30,p≤60
对于 100% 的数据,n,m≤100,p≤1000
Output对于 100% 的数据,n,m≤100,p≤1000
Sample Input2 2 3
* #
. .
LRD
Sample Output* .
. #
解析:模拟行走路径,在每次移动前,先判断是否会超过边界或者不是空地,如果合法前进,就更改地图,同时更改人物坐标,最后将地图输出即可。
#includechar a[105][105],b[1005]; int main() { int n,m,q,i,j,x,y; while(~scanf("%d%d%d",&n,&m,&q)){ for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ scanf(" %c",&a[i][j]); //建立初始地图 if(a[i][j]=='#') x=i,y=j; //记录出生点 } } scanf("%s",b); //读入移动指令 for(i=0;i 0&&a[x][y-1]=='.') a[x][y-1]='#',a[x][y]='.',y--; //更新地图,更新人物坐标 else if(b[i]=='R'&&y+1<=m&&a[x][y+1]=='.') a[x][y+1]='#',a[x][y]='.',y++; else if(b[i]=='D'&&x+1<=n&&a[x+1][y]=='.') a[x+1][y]='#',a[x][y]='.',x++; else if(b[i]=='U'&&x-1>0&&a[x-1][y]=='.') a[x-1][y]='#',a[x][y]='.',x--; } for(i=1;i<=n;i++){ for(j=1;j<=m;j++) printf("%c",a[i][j]); printf("n"); } } return 0; }



