提交时间:2025-10-15 19:03:38

运行 ID: 38531

#include<bits/stdc++.h> using namespace std; int n,m; char dis[55][55]; int k; int way[1005]; string s; bool dp[55][55][1005]; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>dis[i][j]; if(dis[i][j]=='*'){ dis[i][j]='.'; dp[i][j][0]=1; } } } cin>>k; for(int i=1;i<=k;i++){ cin>>s; if(s=="NORTH"){ way[i]=1; }else if(s=="EAST"){ way[i]=2; }else if(s=="SOUTH"){ way[i]=3; }else{ way[i]=4; } } for(int i=1;i<=k;i++){ if(way[i]==1){ for(int a=n;a>=1;a--){ for(int b=1;b<=m;b++){ if(dis[a][b]=='X') continue; dp[a][b][i]=(dp[a+1][b][i-1]||dp[a+1][b][i]); } } }else if(way[i]==2){ for(int b=1;b<=m;b++){ for(int a=1;a<=n;a++){ if(dis[a][b]=='X') continue; dp[a][b][i]=(dp[a][b-1][i-1]||dp[a][b-1][i]); } } }else if(way[i]==3){ for(int a=1;a<=n;a++){ for(int b=1;b<=m;b++){ if(dis[a][b]=='X') continue; dp[a][b][i]=(dp[a-1][b][i-1]||dp[a-1][b][i]); } } }else{ for(int b=m;b>=1;b--){ for(int a=1;a<=n;a++){ if(dis[a][b]=='X') continue; dp[a][b][i]=(dp[a][b+1][i-1]||dp[a][b+1][i]); } } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(dp[i][j][k]){ cout<<'*'; }else{ cout<<dis[i][j]; } } cout<<endl; } return 0; }