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>
std::bitset<505> map[505];
std::bitset<505> pos[505];
std::bitset<505> _pos[505];
std::vector<char> cmds;
int main ()
{
int R, C, M;
std::cin >> R >> C >> M;
for(int row = 1; row <= R; row++)
for(int col = C; col >= 1; col--)
{
char c = ' ';
while(c != '#' && c != '.')
c = std::getchar();
map[row][col] = (c == '#') ? 0 : 1;
pos[row][col] = (c == '#') ? 0 : 1;
}
for(int i = 0; i < M; i++)
{
char c = ' ';
while(c != 'N' && c != 'E' && c != 'S' && c != 'W' && c != '?')
c = std::getchar();
cmds.push_back(c);
}
for(int cmd = 0; cmd < M; cmd++)
{
switch(cmds[cmd])
{
case 'N':
for(int i = 1; i <= R; i++)
pos[i] = pos[i+1] & map[i];
break;
case 'E':
for(int i = 1; i <= R; i++)
pos[i] = (pos[i] >> 1) & map[i];
break;
case 'S':
for(int i = R; i >= 1; i--)
pos[i] = pos[i-1] & map[i];
break;
case 'W':
for(int i = 1; i <= R; i++)
pos[i] = (pos[i] << 1) & map[i];
break;
case '?':
for(int i = 1; i <= R; i++)
_pos[i] = pos[i];
for(int i = 1; i <= R; i++)
pos[i] = (_pos[i+1] & map[i])
| ((_pos[i] << 1) & map[i])
| (_pos[i-1] & map[i])
| ((_pos[i] >> 1) & map[i]);
break;
}
// std::cout << cmds[cmd] << "\n";
// for(int row = 1; row <= R; row++)
// {
// for(int col = C; col >= 1; col--)
// {
// if(map[row][col])
// std::cout << pos[row][col];
// else
// std::cout << "#";
// }
// std::cout << "\n";
// }
// std::cout << "\n";
}
int sum = 0;
for(int r = 1; r <= R; r++)
sum += pos[r].count();
std::cout << sum;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |