Submission #1288751

#TimeUsernameProblemLanguageResultExecution timeMemory
1288751HiepVu217Nautilus (BOI19_nautilus)C++20
100 / 100
94 ms724 KiB
#include <bits/stdc++.h> using namespace std; const int N = 5e3 + 17; int m, n, k, t[N], ans; bitset <500> sea[N], f[N][7]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> m >> n >> k; for (int i = 1; i <= m; ++i) { for (int j = n - 1; j >= 0; --j) { char c; cin >> c; sea[i][j] = (c == '.'); } } for (int i = 1; i <= k; ++i) { char x; cin >> x; if (x == 'W') { t[i] = 0; } if (x == 'E') { t[i] = 1; } if (x == 'N') { t[i] = 2; } if (x == 'S') { t[i] = 3; } if (x == '?') { t[i] = 4; } } for (int i = 1; i <= m; ++i) { f[i][0] = sea[i]; } for (int i = 1; i <= k; ++i) { int b = i & 1; if (t[i] == 0) { for (int i = 1; i <= m; ++i) { f[i][b] = (f[i][b ^ 1] << 1) & sea[i]; } continue; } if (t[i] == 1) { for (int i = 1; i <= m; ++i) { f[i][b] = (f[i][b ^ 1] >> 1) & sea[i]; } continue; } if (t[i] == 2) { for (int i = 1; i <= m; ++i) { f[i][b] = f[i + 1][b ^ 1] & sea[i]; } continue; } if (t[i] == 3) { for (int i = 1; i <= m; ++i) { f[i][b] = f[i - 1][b ^ 1] & sea[i]; } continue; } for (int i = 1; i <= m; ++i) { f[i][b] = (f[i][b ^ 1] << 1) | (f[i][b ^ 1] >> 1) | f[i + 1][b ^ 1] | f[i - 1][b ^ 1]; f[i][b] &= sea[i]; } } for (int i = 1; i <= m; ++i) { ans += f[i][k & 1].count(); } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...