提交时间:2025-10-15 19:33:27

运行 ID: 38541

#include <bits/stdc++.h> using namespace std; int n,m,x,y,k,xx,yy; int f[1005][55][55]; char a[55][55]; string s; int dir[1005]; int dx[5]={0,-1,1,0,0}; int dy[5]={0,0,0,1,-1}; //addition /* dp i行 j列 k次询问 北边看南 南边看北 以此类推 f0ij=0 f* =1 dp kij=dp k-1 i+dx y+dy 或 dp k i+dx j+dy ans=f ijk */ // int main(){ // freopen("car.in","r",stdin); // freopen("car.out","w",stdout); cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; if(a[i][j]=='*') x=i,y=j,a[i][j]='.'; } } cin>>k; for(int i=1;i<=k;i++){ cin>>s; if(s=="NORTH") dir[i]=1; else if(s=="SOUTH") dir[i]=2; else if(s=="EAST") dir[i]=3; else dir[i]=4; } f[0][x][y]=1; for(int d=1;d<=k;d++){ int di=dir[d]; if(di==1){ for(int i=n;i>=1;i--){ for(int j=1;j<=m;j++){ if(a[i][j]=='X') continue; f[d][i][j]=max(f[d][i+1][j],f[d-1][i+1][j]); } } }else if(di==2){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='X') continue; f[d][i][j]=max(f[d][i-1][j],f[d-1][i-1][j]); } } }else if(di==3){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='X') continue; f[d][i][j]=max(f[d][i][j-1],f[d-1][i][j-1]); } } }else{ for(int i=1;i<=n;i++){ for(int j=m;j>=1;j--){ if(a[i][j]=='X') continue; f[d][i][j]=max(f[d][i][j+1],f[d-1][i][j+1]); } } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(f[k][i][j]) cout<<'*'; else cout<<a[i][j]; } cout<<'\n'; } // // // // cout<<'\n'<<'\n'; // for(int d=1;d<=k;d++){ // // for(int i=1;i<=n;i++){ // for(int j=1;j<=m;j++){ // cout<<f[k][i][j]; // }cout<<'\n'; // } // cout<<'\n'<<'\n'; //} // // // // // // cout<<"???????????\n"; // for(int i=1;i<=n;i++){ // for(int j=1;j<=m;j++){ // cout<<vis[i][j]; // } // cout<<'\n'; // } // // fclose(stdin); // fclose(stdout); return 0; } //car /* 5 5 ..... .XX.X ..... X..*. ..X.X 4 NORTH WEST SOUTH WEST */