# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
529681 | 2022-02-23T11:53:41 Z | c28dnv9q3 | Nautilus (BOI19_nautilus) | C++17 | 6 ms | 1356 KB |
#include <vector> #include <iostream> std::vector<char> commands; std::vector<std::vector<char>> map; char dp[105][105][105]; struct pos { int x, y; }; bool recurse(pos p, int a) { if (dp[p.x+1][p.y+1][a + 1] != 0) { return dp[p.x+1][p.y+1][a + 1] == 2; } if (p.x < 0 || p.y < 0 || p.x >= map.size() || p.y >= map[0].size() || map[p.x][p.y] == '#') { dp[p.x + 1][p.y + 1][a + 1] = 1; return false; } if (a == -1) { return map[p.x][p.y] == '.'; } else { bool r = false; switch (commands[a]) { case 0:p.x++; r = recurse(p, a - 1); break; case 1:p.x--; r = recurse(p, a - 1); break; case 2:p.y--; r = recurse(p, a - 1); break; case 3:p.y++; r = recurse(p, a - 1); break; case 4: { bool b = false; p.x++; b = recurse(p, a - 1)?true:b; p.x -= 2; b = recurse(p, a - 1) ? true : b; p.x++; p.y--; b = recurse(p, a - 1) ? true : b; p.y += 2; b = recurse(p, a - 1) ? true : b; p.y--; r = b; } } dp[p.x + 1][p.y + 1][a + 1] = r ? 2 : 1; return r; } } int main() { int R, C, M; scanf("%d%d%d", &R, &C, &M); map = std::vector<std::vector<char>>(R); for (int i = 0; i < R; i++) { map[i].resize(C); } getchar(); for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { char x; x = getchar(); map[i][j] = x; } getchar(); } commands = std::vector<char>(M); for (int i = 0; i < M; i++) { char c = getchar(); int x = -1; switch (c) { case 'N': x = 0; break; case 'S': x = 1; break; case 'E': x = 2; break; case 'W': x = 3; break; case '?': x = 4; break; } commands[i] = x; } int counter = 0; for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { if (map[i][j] == '.' && recurse({ i,j },M-1)) { counter++; } } } std::cout << counter; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 1356 KB | Output is correct |
2 | Incorrect | 2 ms | 1340 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 1356 KB | Output is correct |
2 | Incorrect | 2 ms | 1340 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 6 ms | 1356 KB | Output is correct |
2 | Incorrect | 2 ms | 1340 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |