Submission #969160

#TimeUsernameProblemLanguageResultExecution timeMemory
969160HuyATNautilus (BOI19_nautilus)C++14
100 / 100
176 ms1044 KiB
#include<bits/stdc++.h>

const int MaxN = 5e2 + 10;

std::bitset<MaxN> f[MaxN + 1],f1[MaxN + 1],a[MaxN + 1];
int n,m,q;

void readData(){
    std::cin >> n >> m >> q;
    for(int i = 1;i <= n;++i){
        std::string s;
        std::cin >> s;
        auto func = [&](char &c){
            if(c == '#'){
                c = '0';
            }else{
                c = '1';
            }
        };
        std::for_each(s.begin(),s.end(),func);
        a[i] = std::bitset<MaxN>(s + '0');
        f[i] = a[i];
    }
}
int solve(){
    int ans = 0;
    for(int i = 1;i <= q;++i){
        char c;
        std::cin >> c;
        for(int i = 1;i <= n;++i){
            if(c == 'N' || c == '?'){
                f1[i] |= (a[i] & f[i + 1]);
            }
        }
        for(int i = 1;i <= n;++i){
            if(c == 'S' || c == '?'){
                f1[i] |= (a[i] & f[i - 1]);
            }
        }
        for(int i = 1;i <= n;++i){
            if(c == 'W' || c == '?'){
                f1[i] |= (a[i] & (f[i] << 1));
            }
        }
        for(int i = 1;i <= n;++i){
            if(c == 'E' || c == '?'){
                f1[i] |= (a[i] & (f[i] >> 1));
            }
        }
        for(int i = 1;i <= n;++i){
            f[i] = f1[i];
        }
        for(int i = 1;i <= n;++i){
            f1[i].reset();
        }
    }
    for(int i = 1;i <= n;++i){
        ans += f[i].count();
    }
    return ans;
}
int main(){
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);std::cout.tie(nullptr);
    readData();
    std::cout << solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...