Submission #1187930

#TimeUsernameProblemLanguageResultExecution timeMemory
1187930HasanV11010238Nautilus (BOI19_nautilus)C++20
100 / 100
217 ms528 KiB
#include <bits/stdc++.h>
#define ll long long
#define INF 2000000000
#define MAX 500
using namespace std;
bitset<MAX> bi[MAX], nbi[MAX], ma[MAX];
int main(){
    char c;
    int n, m, x;
    cin>>n>>m>>x;
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            cin>>c;
            if (c == '.'){
                bi[i][j] = 1;
                ma[i][j] = 1;
            }
        }
    }
    string s;
    cin>>s;
    for (auto el : s){
        for (int i = 0; i < MAX; i++) nbi[i] = 0;
        if (el == 'W' || el == '?'){
            for (int i = 0; i < MAX; i++){
                nbi[i] = (nbi[i] | (bi[i]>>1));
            }
        }
        if (el == 'E' || el == '?'){
            for (int i = 0; i < MAX; i++){
                nbi[i] = (nbi[i] | (bi[i]<<1));
            }
        }
        if (el == 'N' || el == '?'){
            for (int i = 1; i < MAX; i++){
                nbi[i - 1] = (nbi[i - 1] | bi[i]);
            }
        }
        if (el == 'S' || el == '?'){
            for (int i = 0; i < MAX - 1; i++){
                nbi[i + 1] = (nbi[i + 1] | bi[i]);
            }
        }
        for (int i = 0; i < MAX; i++) bi[i] = (nbi[i] & ma[i]);
    }
    int ans = 0;
    for (int i = 0; i < MAX; i++) ans += bi[i].count();
    cout<<ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...