#include<iostream>
#include<cassert>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<stack>
#include<set>
#include<queue>
#include<map>
#include<iomanip>
#include<bitset>
#define int long long
#define pb push_back
#define all(v) (v).begin() , (v).end()
using namespace std;
const int N = 600;
bitset<(N)>dp[N][2];
bitset<(N)>bl[N];
signed main(){
ios_base::sync_with_stdio(0) , cin.tie(0);
int n ,m , sz;
cin >> n >> m >> sz;
char c[n+1][m+1];
for(int i=1 ; i <= n ; i++){
for(int j = 1 ; j <= m ; j++){
char x ;
cin >> x ;
if(x=='.'){
dp[i][0][j] = 1 ;
}
else bl[i][j] = 1;
}
}
string s ;
cin >> s ;
s = '+'+s;
int cnt =0 ;
for(int time = 1 ; time <= sz ; time++){
if(s[time]=='N' || s[time]=='?'){
for(int i= 1 ; i < n ; i++){
dp[i][1]|=dp[i+1][0];
}
}
if(s[time]=='S' || s[time]=='?'){
for(int i= 2 ; i <= n ; i++){
dp[i][1]|=dp[i-1][0];
}
}
if(s[time]=='W' || s[time]=='?'){
for(int i= 1 ; i <= n ; i++){
dp[i][1]|=(dp[i][0]>>1);
}
}
if(s[time]=='E' || s[time]=='?'){
for(int i=1 ; i <= n; i++){
dp[i][1]|=(dp[i][0]<<1);
}
}
for(int i = 1 ; i <= n ; i++){
dp[i][1]|=bl[i];
dp[i][1]^=bl[i];
dp[i][0] = dp[i][1];
dp[i][0][m+1] = 0 ;
dp[i][1]&=0;
}
}
for(int i= 1; i <= n ; i++){
for(int j =1 ; j <= m ;j++){
if(dp[i][0][j]==1)cnt++;
}
}
cout<< cnt ;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |