Submission #1036340

#TimeUsernameProblemLanguageResultExecution timeMemory
1036340juicyAwesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
18 ms4256 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif const int N = 505; const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1}; int n, m; int d[N][N]; char a[N][N]; bool vis[N][N]; bool inside(int i, int j) { return 1 <= i && i <= n && 1 <= j && j <= m && !vis[i][j]; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; map<char, int> mp = {{'N', 0}, {'E', 1}, {'S', 2}, {'W', 3}}; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cin >> a[i][j]; } } auto add = [&](int u, int i) { if ((u += i) >= 4) { u -= 4; } if (u < 0) { u += 4; } return u; }; memset(d, 0x3f, sizeof(d)); array<queue<array<int, 2>>, 4> q; q[0].push({1, 1}); d[1][1] = 0; int sz = 1, it = 0; while (sz) { while (!q[it].size()) { it = add(it, 1); } auto [u, v] = q[it].front(); q[it].pop(); --sz; if (vis[u][v]) { continue; } vis[u][v] = 1; if (a[u][v] != 'X') { int p = mp[a[u][v]]; for (int dr = 0; dr < 4; ++dr) { int x = u + dx[dr], y = v + dy[dr]; if (inside(x, y)) { int w = add(dr, -p); d[x][y] = min(d[x][y], d[u][v] + w); q[add(it, w)].push({x, y}); ++sz; } } } } cout << (d[n][m] < 1e9 ? d[n][m] : -1); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...