제출 #1283897

#제출 시각아이디문제언어결과실행 시간메모리
1283897tdd209Nautilus (BOI19_nautilus)C++20
100 / 100
118 ms752 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define fti(i, x, y) for (int i = x; i <= y; ++i) #define ftd(i, x, y) for (int i = x; i >= y; --i) int n, m, c; string s; bitset <502> sea[502], cur[502], tmp[502][5]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> c; fti(i, 1, n) { string t; cin >> t; fti(j, 1, m) sea[i][j] = cur[i][j] = (t[m - j] == '.'); } cin >> s; for (char u : s) { if (u == 'E') fti(i, 1, n) cur[i] = (cur[i] >> 1) & sea[i]; else if (u == 'W') fti(i, 1, n) cur[i] = (cur[i] << 1) & sea[i]; else if (u == 'N') { fti(i, 1, n - 1) cur[i] = cur[i + 1] & sea[i]; cur[n].reset(); } else if (u == 'S') { ftd(i, n, 2) cur[i] = cur[i - 1] & sea[i]; cur[1].reset(); } else { fti(i, 1, n) tmp[i][0] = (cur[i] >> 1) & sea[i], tmp[i][1] = (cur[i] << 1) & sea[i]; fti(i, 1, n - 1) tmp[i][2] = cur[i + 1] & sea[i]; ftd(i, n, 2) tmp[i][3] = cur[i - 1] & sea[i]; tmp[n][2].reset(); tmp[1][3].reset(); fti(i, 1, n) cur[i] = (tmp[i][0] | tmp[i][1] | tmp[i][2] | tmp[i][3]) & sea[i]; } } int res = 0; fti(i, 1, n) res += cur[i].count(); cout << res; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...