# include <iostream>
# include <bitset>
using namespace std;
const int S=500,MAX=5e3+11;
int n,m,q;
char ori[MAX];
bitset<S> b[2][S];
bitset<S> ocean[S];
int f(int x) {return x&1;}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m>>q;
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
char x;
cin>>x;
if(x=='.') ocean[i][j]=1;
}
}
for(int i=1;i<=q;i++) cin>>ori[i];
for(int i=0;i<n;i++) b[f(0)][i]=ocean[i];
for(int t=1;t<=q;t++)
{
for(int i=0;i<n;i++) b[f(t)][i].reset();
if(ori[t]=='N' or ori[t]=='?')
{
for(int i=0;i<n-1;i++) b[f(t)][i]|=b[f(t-1)][i+1];
}
if(ori[t]=='S' or ori[t]=='?')
{
for(int i=1;i<n;i++) b[f(t)][i]|=b[f(t-1)][i-1];
}
if(ori[t]=='E' or ori[t]=='?')
{
for(int i=0;i<n;i++) b[f(t)][i]|=(b[f(t-1)][i]<<1);
}
if(ori[t]=='W' or ori[t]=='?')
{
for(int i=0;i<n;i++) b[f(t)][i]|=(b[f(t-1)][i]>>1);
}
for(int i=0;i<n;i++) b[f(t)][i]&=ocean[i];
}
int ans=0;
for(int i=0;i<n;i++) ans+=b[f(q)][i].count();
cout<<ans<<"\n";
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... |