#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define pb push_back
#define szz(s) int(s.size())
#define all(s) s.begin(), s.end()
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define REP(i, a, b) for(int i = a; i >= b; --i)
const int N = 5000 + 5;
int n, m, k;
int a[N][N];
string tt, s;
namespace sub2{
int dp[105][105][105];
void solve(){
FOR(i, 1, n){
FOR(j, 1, m) if(a[i][j]) dp[0][i][j] = 1;
}
FOR(t, 0, k - 1){
FOR(i, 1, n){
FOR(j, 1, m){
if(dp[t][i][j]){
if(s[t] == 'N' || s[t] == '?'){
if(a[i - 1][j]) dp[t + 1][i - 1][j] = 1;
}
if(s[t] == 'S' || s[t] == '?'){
if(a[i + 1][j]) dp[t + 1][i + 1][j] = 1;
}
if(s[t] == 'W' || s[t] == '?'){
if(a[i][j - 1]) dp[t + 1][i][j - 1] = 1;
}
if(s[t] == 'E' || s[t] == '?'){
if(a[i][j + 1]) dp[t + 1][i][j + 1] = 1;
}
}
}
}
// FOR(i, 1, n){
// FOR(j, 1, m) cout << dp[t][i][j] << " ";
// cout << "\n";
// }
// cout << "\n";
}
int res = 0;
FOR(i, 1, n){
FOR(j, 1, m){
if(dp[k][i][j]) ++res;
}
}
cout << res;
}
}
namespace ac{
bitset<505> dp[5005][505];
void solve(){
FOR(i, 1, n){
FOR(j, 1, m) if(a[i][j]) dp[0][i].set(j);
}
s = "#" + s;
FOR(t, 1, k){
if(s[t] == 'N' || s[t] == '?'){
FOR(i, 1, n){
dp[t][i] |= dp[t - 1][i + 1];
dp[t][i] &= dp[0][i];
}
}
if(s[t] == 'S' || s[t] == '?'){
FOR(i, 1, n){
dp[t][i] |= dp[t - 1][i - 1];
dp[t][i] &= dp[0][i];
}
}
if(s[t] == 'W' || s[t] == '?'){
FOR(i, 1, n){
dp[t][i] |= (dp[t - 1][i] >> 1);
dp[t][i] &= dp[0][i];
}
}
if(s[t] == 'E' || s[t] == '?'){
FOR(i, 1, n){
dp[t][i] |= (dp[t - 1][i] << 1);
dp[t][i] &= dp[0][i];
}
}
// FOR(i, 1, n){
// FOR(j, 1, m) cout << dp[t][i][j] << " ";
// cout << "\n";
// }
// cout << "\n";
}
int res = 0;
FOR(i, 1, n){
FOR(j, 1, m){
if(dp[k][i][j]) ++res;
}
}
cout << res;
}
}
void solve(){
cin >> n >> m >> k;
FOR(i, 1, n){
cin >> tt;
FOR(j, 1, m){
a[i][j] = tt[j - 1] == '.';
// cout << a[i][j] << " ";
}
// cout << "\n";
}
cin >> s;
// sub2::solve();
ac::solve();
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |