#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fti(i, x, y) for (int i = x; i <= y; ++i)
#define ftd(i, x, y) for (int i = x; i >= y; --i)
int n, m, c;
string s;
bitset <502> sea[502], cur[502], tmp[502][5];
int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n >> m >> c;
    fti(i, 1, n)
    {
        string t; cin >> t;
        fti(j, 1, m)
            sea[i][j] = cur[i][j] = (t[m - j] == '.');
    }
    cin >> s;
    for (char u : s)
    {
        if (u == 'E')
            fti(i, 1, n) cur[i] = (cur[i] >> 1) & sea[i];
        else if (u == 'W')
            fti(i, 1, n) cur[i] = (cur[i] << 1) & sea[i];
        else if (u == 'N')
        {
            fti(i, 1, n - 1) cur[i] = cur[i + 1] & sea[i];
            cur[n].reset();
        }
        else if (u == 'S')
        {
            ftd(i, n, 2) cur[i] = cur[i - 1] & sea[i];
            cur[1].reset();
        }
        else
        {
            fti(i, 1, n)
                tmp[i][0] = (cur[i] >> 1) & sea[i],
                tmp[i][1] = (cur[i] << 1) & sea[i];
            fti(i, 1, n - 1)
                tmp[i][2] = cur[i + 1] & sea[i];
            ftd(i, n, 2)
                tmp[i][3] = cur[i - 1] & sea[i];
            tmp[n][2].reset();
            tmp[1][3].reset();
            fti(i, 1, n) cur[i] = (tmp[i][0] | tmp[i][1] | tmp[i][2] | tmp[i][3]) & sea[i];
        }
    }
    int res = 0;
    fti(i, 1, n) res += cur[i].count();
    cout << res;
    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... |