This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int MXN = 505;
int r, c, m;
string A[MXN], moves;
bitset<MXN*MXN> water, poss, first_col, first_row, last_col, last_row;
int main() {
cin >> r >> c >> m;
for(int i = 0; i < r; i++) {
cin >> A[i];
for(int j = 0; j < c; j++) {
if(A[i][j] == '.') water[i*c+j] = 1;
}
}
for(int i = 0; i < r; i++) {
first_col[i*c] = 1;
last_col[i*c+c-1] = 1;
}
for(int i = 0; i < c; i++) {
first_row[i] = 1;
last_row[(r-1)*c+i] = 1;
}
poss = water;
cin >> moves;
for(int i = 0; i < m; i++) {
switch(moves[i]) {
case 'N':
poss = ((poss & ~first_row) >> c) & water;
break;
case 'E':
poss = ((poss & ~last_col) << 1) & water;
break;
case 'S':
poss = ((poss & ~last_row) << c) & water;
break;
case 'W':
poss = ((poss & ~first_col) >> 1) & water;
break;
case '?':
poss =
(((poss & ~first_row) >> c) |
((poss & ~last_col) << 1) |
((poss & ~last_row) << c) |
((poss & ~first_col) >> 1))
& water;
break;
default:
assert(false);
}
}
cout << poss.count() << "\n";
return 0;
}
/*
3 3 1
...
.#.
...
E
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |