Submission #1167184

#TimeUsernameProblemLanguageResultExecution timeMemory
1167184InvMODNautilus (BOI19_nautilus)C++20
100 / 100
135 ms636 KiB
#include<bits/stdc++.h> using namespace std; #define sz(v) (int)(v).size() const int N = 505; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int r,c,m; cin >> r >> c >> m; vector<bitset<N>> a(r, bitset<N>()); for(int i = 0; i < r; i++){ for(int j = 0; j < c; j++){ char x; cin >> x; a[i][j] = (x != '#'); } } vector<vector<bitset<N>>> dp(2, vector<bitset<N>>(r, bitset<N>())); for(int i = 0; i < r; i++){ for(int j = 0; j < c; j++){ dp[0][i][j] = a[i][j]; } } string s; cin >> s; bitset<N> base(0); auto modify_north = [&]() -> void{ // i -> i - 1 dp[1][r - 1] = dp[1][r - 1] & base; for(int i = r - 2; i >= 0; i--){ dp[1][i] = dp[0][i + 1] & a[i]; } swap(dp[0], dp[1]); }; auto modify_south = [&]() -> void{ // i -> i + 1 dp[1][0] = dp[1][0] & base; for(int i = 1; i < r; i++){ dp[1][i] = dp[0][i - 1] & a[i]; } swap(dp[0], dp[1]); }; auto modify_east = [&]() -> void{ // j -> j + 1 for(int i = 0; i < r; i++){ dp[1][i] = (dp[0][i] << 1) & a[i]; } swap(dp[0], dp[1]); }; auto modify_west = [&]() -> void{ // j -> j - 1 for(int i = 0; i < r; i++){ dp[1][i] = (dp[0][i] >> 1) & a[i]; } swap(dp[0], dp[1]); }; auto random_modify = [&]() -> void{ for(int i = 0; i < r; i++) dp[1][i] = dp[1][i] & base; for(int i = 0; i < r; i++){ dp[1][i] = dp[1][i] | ((dp[0][i] << 1) & a[i]); dp[1][i] = dp[1][i] | ((dp[0][i] >> 1) & a[i]); if(i > 0) dp[1][i] = dp[1][i] | (dp[0][i - 1] & a[i]); if(i < r - 1) dp[1][i] = dp[1][i] | (dp[0][i + 1] & a[i]); } swap(dp[0], dp[1]); }; for(char& x : s){ if(x == 'N') modify_north(); if(x == 'S') modify_south(); if(x == 'W') modify_west(); if(x == 'E') modify_east(); if(x == '?') random_modify(); } int answer = 0; for(int i = 0; i < r; i++) answer = answer + dp[0][i].count(); cout << answer << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...