Submission #146446

#TimeUsernameProblemLanguageResultExecution timeMemory
146446meatrowNautilus (BOI19_nautilus)C++17
100 / 100
283 ms876 KiB
//#pragma GCC optimize("O3") //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native") //#pragma GCC optimize ("unroll-loops") #include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; const int N = 500; bitset<N> dp[2][N]; bitset<N> water[N]; int r, c; void hor_shift(int u, int s) { if (s > 0) { for (int i = 0; i < r; i++) { dp[u][i] |= dp[u ^ 1][i] >> 1; } } else { for (int i = 0; i < r; i++) { dp[u][i] |= dp[u ^ 1][i] << 1; } } } void ver_shift(int u, int s) { for (int i = 0; i < r; i++) { if (i + s >= 0 && i + s < r) { dp[u][i] |= dp[u ^ 1][i + s]; } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int m; cin >> r >> c >> m; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) { char a; cin >> a; if (a == '.') { water[i].set(j); dp[0][i][j] = 1; } } } string t; cin >> t; int v = 0; for (char c : t) { int u = v ^ 1; for (int i = 0; i < r; i++) { dp[u][i].reset(); } if (c == 'N') { ver_shift(u, 1); } if (c == 'S') { ver_shift(u, -1); } if (c == 'E') { hor_shift(u, -1); } if (c == 'W') { hor_shift(u, 1); } if (c == '?') { ver_shift(u, 1); ver_shift(u, -1); hor_shift(u, 1); hor_shift(u, -1); } for (int i = 0; i < r; i++) { dp[u][i] &= water[i]; } v ^= 1; } int ans = 0; for (int i = 0; i < r; i++) { ans += dp[m & 1][i].count(); } cout << ans; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...