Submission #1165244

#TimeUsernameProblemLanguageResultExecution timeMemory
1165244fryingducNautilus (BOI19_nautilus)C++20
100 / 100
135 ms760 KiB
#include "bits/stdc++.h" using namespace std; #ifdef duc_debug #include "bits/debug.h" #else #define debug(...) #endif const int maxn = 505; const int M = 5005; int n, m, t; char a[maxn][maxn]; string s; bitset<maxn> bs[maxn]; bitset<maxn> block[maxn]; void solve() { cin >> n >> m >> t; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cin >> a[i][j]; } } cin >> s; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { if (a[i][j] != '#') bs[i].set(j); } block[i] = bs[i]; } for (auto c : s) { if (c == 'N') { for (int i = 1; i <= n; ++i) { bs[i] = bs[i + 1] & block[i]; } } else if (c == 'S') { for (int i = n; i; --i) { bs[i] = bs[i - 1] & block[i]; } } else if (c == 'E') { for (int i = 1; i <= n; ++i) { bs[i] = (bs[i] << 1) & block[i]; } } else if (c == 'W') { for (int i = 1; i <= n; ++i) { bs[i] = (bs[i] >> 1) & block[i]; } } else { bitset<maxn> prv, cur; for (int i = 1; i <= n; ++i) { cur = bs[i]; bs[i] = (prv & block[i]) | (bs[i + 1] & block[i]) | ((bs[i] >> 1) & block[i]) | ((bs[i] << 1) & block[i]); prv = cur; } } } int res = 0; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { // cout << bs[i][j]; if (bs[i][j]) ++res; } // cout << '\n'; } cout << res; } signed main() { ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...