Submission #934726

#TimeUsernameProblemLanguageResultExecution timeMemory
934726asdasdqwerNautilus (BOI19_nautilus)C++14
100 / 100
121 ms1068 KiB
#include <bits/stdc++.h>
using namespace std;

#define int int64_t

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int n,m,k;cin>>n>>m>>k;
    vector<string> s(n);
    for (auto &x:s)cin>>x;

    string dir;cin>>dir;
    vector<bitset<501>> bt(n);
    for (int i=0;i<n;i++) {
        for (int j=0;j<m;j++) {
            if (s[i][j] == '#') {
                bt[i][j] = 0;
            }

            else {
                bt[i][j] = 1;
            }
        }
    }

    vector<bitset<501>> bt2 = bt, bt3(n);

    for (auto x:dir) {
        if (x == 'E' || x == '?') {
            for (int i=0;i<n;i++) {
                bt3[i] |= bt2[i] << 1;
            }
        }

        if (x == 'N' || x == '?') {
            for (int i=1;i<n;i++) {
                bt3[i-1] |= bt2[i];
            }
        }

        if (x == 'W' || x == '?') {
            for (int i=0;i<n;i++) {
                bt3[i] |= bt2[i] >> 1;
            }
        }

        if (x == 'S' || x == '?') {
            for (int i=1;i<n;i++) {
                bt3[i] |= bt2[i-1];
            }
        }

        for (int i=0;i<n;i++) {
            bt3[i] &= bt[i];
        }

        swap(bt2, bt3);

        for (auto &x:bt3) {
            x.reset();
        }
    }

    int res = 0;
    for (auto x:bt2) {
        res += x.count();
    }

    cout<<res<<"\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...