Submission #414717

#TimeUsernameProblemLanguageResultExecution timeMemory
414717tengiz05Nautilus (BOI19_nautilus)C++17
100 / 100
368 ms157548 KiB
#include <bits/stdc++.h> using i64 = long long; constexpr int N = 501, K = 5001; char g[N][N]; std::bitset<N> dp[K][N]; std::bitset<N> a[N]; int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n, m, k; std::cin >> n >> m >> k; memset(g, '#', sizeof g); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { std::cin >> g[i][j]; a[i][j] = (g[i][j] == '.'); } } std::string s; std::cin >> s; int ans = 0; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { dp[0][i][j] = (g[i][j] == '.'); } } for (int K = 1; K <= k; K++) { for (int i = 1; i <= n; i++) { int x = 0, y = 0; if (s[K - 1] == 'N') x++; else if (s[K - 1] == 'S') x--; else if (s[K - 1] == 'W') y++; else if (s[K - 1] == 'E') y--; else { dp[K][i] = dp[K][i] | dp[K - 1][i - 1]; dp[K][i] = dp[K][i] | (dp[K - 1][i] << 1); dp[K][i] = dp[K][i] | dp[K - 1][i + 1]; dp[K][i] = dp[K][i] | (dp[K - 1][i] >> 1); dp[K][i] &= a[i]; continue; } if (x) dp[K][i] = a[i] & dp[K - 1][i + x]; else if (y == -1) { dp[K][i] = a[i] & (dp[K - 1][i] << 1); } else if (y == 1) { dp[K][i] = a[i] & (dp[K - 1][i] >> 1); } else assert(false); } // for (int i = 1; i <= n; i++) { // for (int j = 1; j <= m; j++) { // std::cout << dp[K][i][j]; // } // std::cout << "\n"; // } // std::cout << "\n"; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { ans += dp[k][i][j]; } } std::cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...