Submission #1247697

#TimeUsernameProblemLanguageResultExecution timeMemory
1247697ethkc256Awesome Arrowland Adventure (eJOI19_adventure)C++20
50 / 100
8 ms8008 KiB
#include <bits/stdc++.h> #define ll long long using namespace std; char grid[505][505] = {}; int coords[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; vector <pair <int, int>> graph[250005]; int distances[250005] = {}; void dijkstra(int start) { priority_queue <pair <int, int>> pq; distances[start] = 0; pq.push(make_pair(0, start)); while (!pq.empty()) { auto x = pq.top(); pq.pop(); int dist = -x.first; int node = x.second; if (dist > distances[node]) continue; for (pair <int, int> P : graph[node]) { if (dist + P.first < distances[P.second]) { distances[P.second] = dist + P.first; pq.push(make_pair(-distances[P.second], P.second)); } } } } int main() { int N, M; string S = "NESW"; cin >> N >> M; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) cin >> grid[i][j]; } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { distances[(i - 1) * max(N, M) + j] = 1e6; } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { int f = -1; for (int idx = 0; idx < 4; idx++) { if (S[idx] == grid[i][j]) f = idx; } if (f == -1) continue; for (int n = 0; n <= 3; n++) { auto C = coords[(f + n) % 4]; int start = (i - 1) * max(N, M) + j; int dest = (i + C[0] - 1) * max(N, M) + (j + C[1]); if ((1 <= i + C[0] && i + C[0] <= N) && (1 <= j + C[1] && j + C[1] <= M)) { graph[start].emplace_back(make_pair(n, dest)); } } } } dijkstra(1); cout << (distances[N*M] > N*M*3? -1 : distances[N*M]); }
#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...