제출 #677690

#제출 시각아이디문제언어결과실행 시간메모리
677690vjudge1Nautilus (BOI19_nautilus)C++17
100 / 100
145 ms716 KiB
/*
Author : DeMen100ns (a.k.a Vo Khac Trieu)
School : VNU-HCM High school for the Gifted
fuck you adhoc
*/

#include <bits/stdc++.h>
#define endl '\n'

using namespace std;

const int N = 2e5 + 5;
const long long INF = 1e18 + 7;
const int MAXA = 1e9;
const int B = sqrt(N) + 5;

bitset <505> bs[2][505];
bitset <505> a[505];

void solve()
{
    int n, m, r; cin >> n >> m >> r;

    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            char c; cin >> c;
            if (c == '.') a[i].set(j);
        }
        bs[0][i] = a[i];
    }

    string s; cin >> s;

    int cur = 0;
    for(char c : s){
        if (c == 'W' || c == '?'){
            for(int i = 1; i <= n; ++i){
                bs[cur ^ 1][i] |= (bs[cur][i] >> 1);
            }
        }

        if (c == 'E' || c == '?'){
            for(int i = 1; i <= n; ++i){
                bs[cur ^ 1][i] |= (bs[cur][i] << 1);
            }
        }

        if (c == 'N' || c == '?'){
            for(int i = 2; i <= n; ++i){
                bs[cur ^ 1][i - 1] |= (bs[cur][i]);
            }
        }

        if (c == 'S' || c == '?'){
            for(int i = 2; i <= n; ++i){
                bs[cur ^ 1][i] |= (bs[cur][i - 1]);
            }
        }

        for(int i = 1; i <= n; ++i){
            bs[cur ^ 1][i] &= a[i];
            bs[cur][i].reset();
        }

        cur ^= 1;
    }
    int ans = 0;
    for(int i = 1; i <= n; ++i){
        ans += bs[cur][i].count();
    }
    cout << ans;
}

signed main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    // freopen("codeforces.inp","r",stdin);
    // freopen("codeforces.out","w",stdout);

    int t = 1; // cin >> t;
    while (t--)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...