Submission #1136674

#TimeUsernameProblemLanguageResultExecution timeMemory
1136674mmdrzadaNautilus (BOI19_nautilus)C++20
100 / 100
81 ms1020 KiB
// Nautilus // Village // Alphine walley #include <bits/stdc++.h> using namespace std; #define vi vector<int> #define REP(i, k) for(int i = 0 ; i < k ; i ++) #define pb push_back #define pii pair<int, int> #define ll long long #define sep ' ' #define F first #define S second const int N = 501, M = 5001; int r, c, m; string s[N]; string t; bitset<N> dp[2][N]; bitset<N> emp[N]; pii change(pii curr, char c) { if (c == 'N') curr.F++; else if (c == 'S') curr.F--; if (c == 'E') curr.S--; if (c == 'W') curr.S++; return curr; } bool valid(int i, int j) { return 0 <= i && i < r && 0 <= j && j < c; } bool check(int i, int j) { if (s[i][j] == '#') return false; pii curr = {i, j}; for(char c: t) { pii ne = change(curr, c); if (valid(ne.F, ne.S) && s[ne.F][ne.S] != '#') curr = ne; else return false; } return true; } void solve() { cin >> r >> c >> m; REP(i, r) cin >> s[i]; cin >> t; REP(i, r) { REP(j, c) { emp[i][j] = dp[1][i][j] = s[i][j] != '#'; } } for(int i = 0 ; i < m ; i ++) { int curr= i%2; if (t[i] == 'N') { for(int j = 0 ; j < r ; j ++) { if (j == r-1) dp[curr][j].reset(); else dp[curr][j] = dp[1-curr][j+1]; } } else if (t[i] == 'E') { for(int j = 0 ; j < r ; j ++) { dp[curr][j] = dp[1-curr][j]<<1; } } else if (t[i] == 'S') { for(int j = 0 ; j < r ; j ++) { if (j == 0) dp[curr][j].reset(); else dp[curr][j] = dp[1-curr][j-1]; } } else if (t[i] == 'W') { for(int j = 0 ; j < r ; j ++) { dp[curr][j] = dp[1-curr][j]>>1; } } else { for(int j = 0 ; j < r ; j ++) { dp[curr][j] = (dp[1-curr][j]>>1) | (dp[1-curr][j]<<1); if (j > 0) dp[curr][j] |= dp[1-curr][j-1]; if (j < r) dp[curr][j] |= dp[1-curr][j+1]; } } for(int j = 0 ; j < r ; j ++) dp[curr][j] &= emp[j]; } int ans = 0; REP(i, r) { REP(j, c) { ans += dp[1-m%2][i][j]; } } cout << ans << endl; } int32_t main() { solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...