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...