#include<iostream>
#include<queue>
#include<string>
using namespace std;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1};
int main(){
int r,c,m;cin>>r>>c>>m;
string map[r],s;for(int i=0;i<r;++i)cin>>map[i];cin>>s;
bool dp[500][500]={};
queue<pair<int,int>>q;
for(int i=0;i<r;++i)for(int j=0;j<c;++j)if(map[i][j]=='.')dp[i][j]=1,q.push({i,j});
for(char ch:s){
int sz=q.size();
bool ndp[500][500]={};
queue<pair<int,int>>nq;
while(sz--){
auto[x,y]=q.front();q.pop();
for(int d=0;d<4;++d)if(ch=='?'||"NESW"[d]==ch){
int nx=x+dx[d],ny=y+dy[d];
if(nx>=0&&nx<r&&ny>=0&&ny<c&&map[nx][ny]=='.'&&!ndp[nx][ny])ndp[nx][ny]=1,nq.push({nx,ny});
}
}
swap(dp,ndp);swap(q,nq);
}
int ans=0;
for(int i=0;i<r;++i)for(int j=0;j<c;++j)if(dp[i][j])++ans;
cout<<ans;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |