287402026-05-28 17:49:37sarminFantasztikus Kaland Nyílországbancpp17Elfogadva 100/100143ms21420 KiB
#include <bits/stdc++.h>
using ll = long long;
using namespace std;

const int INF = 1e9;
int n, m;
vector<vector<pair<int, int>>> g;
vector<string> t;

int cost(int i, int j, int k) {
    char d = t[i][j];
    int D = 3;
    if (d == 'N') D = 0;
    else if (d == 'E') D = 1;
    else if (d == 'S') D = 2;
    return (k-D+4)%4;
}

pair<int, int> szomszed(int i, int j, int k) {
    array<int, 2> o = {i, j};
    i = i + (k == 0 ? -1 : (k == 2 ? 1 : 0));
    j = j + (k == 3 ? -1 : (k == 1 ? 1 : 0));
    if (i < 0 || i >= n || j < 0 || j >= m) return {-1, -1};
    return {i*m+j, cost(o[0], o[1], k)};
}

int main() {

    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    cin >> n >> m;
    g.resize(n*m); t.resize(n);
    for (int i = 0; i < n; i++) {
        cin >> t[i];
    }
    // Elek felvetele
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (t[i][j] == 'X') continue;
            for (int k = 0; k <= 3; k++) {
                pair<int, int> cur = szomszed(i, j, k);
                if (cur.first != -1) {
                    g[i*m+j].push_back(cur);
                }
            }
        }
    }

    // Dijkstra
    vector<int> dis(n*m, INF);
    vector<bool> vis(n*m, false);
    dis[0] = 0;
    priority_queue<pair<int, int>> q; // {dis, elem}
    q.push({0, 0});
    
    while (!q.empty()) {
        int top = q.top().second;
        q.pop();
        if (vis[top]) continue;
        vis[top] = true;
        for (auto& [i, cost] : g[top]) {
            int d = dis[top] + cost;
            if (d < dis[i]) {
                dis[i] = d;
                q.push({-d, i});
            }
        }
    }

    cout << (dis[n*m-1] == INF ? -1 : dis[n*m-1]) << "\n";

	
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask110/10
1Elfogadva1ms500 KiB
2Elfogadva1ms316 KiB
3Elfogadva1ms500 KiB
4Elfogadva1ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms552 KiB
7Elfogadva1ms316 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
subtask212/12
1Elfogadva1ms316 KiB
2Elfogadva1ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms316 KiB
5Elfogadva2ms316 KiB
6Elfogadva1ms316 KiB
7Elfogadva1ms396 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms316 KiB
10Elfogadva1ms316 KiB
subtask312/12
1Elfogadva1ms316 KiB
2Elfogadva1ms332 KiB
3Elfogadva1ms316 KiB
4Elfogadva1ms500 KiB
subtask416/16
1Elfogadva1ms316 KiB
2Elfogadva2ms316 KiB
3Elfogadva1ms316 KiB
4Elfogadva2ms316 KiB
5Elfogadva1ms316 KiB
6Elfogadva1ms508 KiB
7Elfogadva1ms500 KiB
8Elfogadva1ms316 KiB
9Elfogadva1ms508 KiB
10Elfogadva1ms316 KiB
subtask550/50
1Elfogadva10ms1844 KiB
2Elfogadva1ms564 KiB
3Elfogadva13ms2100 KiB
4Elfogadva8ms3124 KiB
5Elfogadva129ms16836 KiB
6Elfogadva119ms16892 KiB
7Elfogadva52ms16916 KiB
8Elfogadva127ms16948 KiB
9Elfogadva143ms21420 KiB
10Elfogadva54ms16900 KiB