제출 #713700

#제출 시각아이디문제언어결과실행 시간메모리
713700Alex_tz307Nautilus (BOI19_nautilus)C++17
100 / 100
145 ms720 KiB
#include <bits/stdc++.h> using namespace std; const int kN = 500; bitset<kN> grid[1 + kN + 1]; bitset<kN> dp[2][1 + kN + 1]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m, p; cin >> n >> m >> p; for (int i = 1; i <= n; ++i) { string s; cin >> s; for (int j = 0; j < m; ++j) { if (s[j] == '.') { grid[i][j] = 1; } } } string moves; cin >> moves; for (int i = 1; i <= n; ++i) { dp[0][i] = grid[i]; } int t = 0; for (int step = 0; step < p; ++step, t ^= 1) { for (int i = 1; i <= n; ++i) { dp[t ^ 1][i].reset(); if (moves[step] == 'N' || moves[step] == '?') { dp[t ^ 1][i] |= dp[t][i + 1]; } if (moves[step] == 'E' || moves[step] == '?') { dp[t ^ 1][i] |= dp[t][i] << 1; } if (moves[step] == 'S' || moves[step] == '?') { dp[t ^ 1][i] |= dp[t][i - 1]; } if (moves[step] == 'W' || moves[step] == '?') { dp[t ^ 1][i] |= dp[t][i] >> 1; } dp[t ^ 1][i] &= grid[i]; } } int res = 0; for (int i = 1; i <= n; ++i) { res += dp[t][i].count(); } cout << res << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...