Submission #444778

#TimeUsernameProblemLanguageResultExecution timeMemory
444778prvocisloNautilus (BOI19_nautilus)C++17
100 / 100
146 ms776 KiB
#include <bits/stdc++.h> typedef long long ll; using namespace std; const int maxn = 505; int r, c, m; vector<bitset<maxn> > v(maxn); // povodne pole void w(vector<bitset<maxn> > &b) { for (int i = 0; i < r; i++) b[i] >>= 1; } void e(vector<bitset<maxn> > &b) { for (int i = 0; i < r; i++) b[i] <<= 1; } void n(vector<bitset<maxn> > &b) { for (int i = 0; i < r; i++) b[i] = b[i+1]; } void s(vector<bitset<maxn> > &b) { for (int i = r-1; i > 0; i--) b[i] = b[i-1]; b[0] = 0; } void fix(vector<bitset<maxn> > &b) { for (int i = 0; i < r; i++) b[i] &= v[i]; } void print(vector<bitset<maxn> > &b) { cout << "\n=============\n"; for (int i = 0; i < r; i++) { for (int j = 0; j < c; j++) cout << b[i][j]; cout << "\n"; } cout << endl; } int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> r >> c >> m; for (int i = 0; i < r; i++) { string vi; cin >> vi; for (int j = 0; j < c; j++) if (vi[j] == '.') v[i][j] = 1; } //print(v); string st; cin >> st; vector<bitset<maxn> > b = v; //print(b); for (char ch : st) { if (ch == 'N') n(b); if (ch == 'E') e(b); if (ch == 'S') s(b); if (ch == 'W') w(b); if (ch == '?') // mozeme urobit lubovolny zo styroch krokov { vector<bitset<maxn> > nw[4]; for (int j = 0; j < 4; j++) nw[j] = b; n(nw[0]), e(nw[1]), s(nw[2]), w(nw[3]); for (int j = 0; j < r; j++) for (int k = 1; k < 4; k++) nw[0][j] |= nw[k][j]; b = nw[0]; } fix(b); //print(b); } //print(b); int ans = 0; for (int i = 0; i < r; i++) ans += b[i].count(); cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...