Submission #1247677

#TimeUsernameProblemLanguageResultExecution timeMemory
1247677ethkc256Awesome Arrowland Adventure (eJOI19_adventure)C++20
0 / 100
3 ms6216 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]);
                graph[start].emplace_back(make_pair(n, dest));
            }
        }
    }
    dijkstra(1);
    cout << (distances[N*M] == 1e6? -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...