Submission #529701

#TimeUsernameProblemLanguageResultExecution timeMemory
529701c28dnv9q3Nautilus (BOI19_nautilus)C++17
66 / 100
34 ms2868 KiB
#include <vector> #include <iostream> #define MAXN 210 char commands[MAXN]; char map[MAXN][MAXN]; char dp[MAXN][MAXN][MAXN]; int R, C, M; 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 >= R || p.y >= C || 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); p.x--; break; case 1:p.x--; r = recurse(p, a - 1); p.x++; break; case 2:p.y--; r = recurse(p, a - 1); p.y++; break; case 3:p.y++; r = recurse(p, a - 1); p.y--; break; case 4: { bool b = false; p.x++; b = recurse(p, a - 1) || b; p.x -= 2; b = recurse(p, a - 1) || b; p.x++; p.y--; b = recurse(p, a - 1) || b; p.y += 2; b = recurse(p, a - 1) || b; p.y--; r = b; } } dp[p.x + 1][p.y + 1][a + 1] = r ? 2 : 1; return r; } } int main() { scanf("%d%d%d", &R, &C, &M); getchar(); for (int i = 0; i < R; i++) { for (int j = 0; j < C; j++) { char x; x = getchar(); map[i][j] = x; } getchar(); } 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 (stderr)

nautilus.cpp: In function 'int main()':
nautilus.cpp:52:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   52 |  scanf("%d%d%d", &R, &C, &M);
      |  ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...