Submission #529673

#TimeUsernameProblemLanguageResultExecution timeMemory
529673c28dnv9q3Nautilus (BOI19_nautilus)C++17
0 / 100
1 ms332 KiB
#include <vector> #include <iostream> std::vector<int> commands; std::vector<std::vector<char>> map; int dp[105][105][105]; struct pos { int x, y; }; bool recurse(pos p, int a) { if (dp[p.x][p.y][a + 1] != 0) { return dp[p.x][p.y][a + 1]; } if (p.x<0 || p.y<0 || p.x>=map.size() || p.y>=map[0].size()||map[p.x][p.y]=='#') { 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][p.y][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<int>(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 (stderr)

nautilus.cpp: In function 'bool recurse(pos, int)':
nautilus.cpp:16:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |  if (p.x<0 || p.y<0 || p.x>=map.size() || p.y>=map[0].size()||map[p.x][p.y]=='#') {
      |                        ~~~^~~~~~~~~~~~
nautilus.cpp:16:46: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   16 |  if (p.x<0 || p.y<0 || p.x>=map.size() || p.y>=map[0].size()||map[p.x][p.y]=='#') {
      |                                           ~~~^~~~~~~~~~~~~~~
nautilus.cpp:46:1: warning: control reaches end of non-void function [-Wreturn-type]
   46 | }
      | ^
nautilus.cpp: In function 'int main()':
nautilus.cpp:50:7: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   50 |  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...