| 28740 | 2026-05-28 17:49:37 | sarmin | Fantasztikus Kaland Nyílországban | cpp17 | Elfogadva 100/100 | 143ms | 21420 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 | Összpont | Teszt | Verdikt | Idő | Memória | ||
|---|---|---|---|---|---|---|---|
| subtask1 | 10/10 | ||||||
| 1 | Elfogadva | 1ms | 500 KiB | ||||
| 2 | Elfogadva | 1ms | 316 KiB | ||||
| 3 | Elfogadva | 1ms | 500 KiB | ||||
| 4 | Elfogadva | 1ms | 316 KiB | ||||
| 5 | Elfogadva | 1ms | 316 KiB | ||||
| 6 | Elfogadva | 1ms | 552 KiB | ||||
| 7 | Elfogadva | 1ms | 316 KiB | ||||
| 8 | Elfogadva | 1ms | 316 KiB | ||||
| 9 | Elfogadva | 1ms | 316 KiB | ||||
| 10 | Elfogadva | 1ms | 316 KiB | ||||
| subtask2 | 12/12 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Elfogadva | 1ms | 316 KiB | ||||
| 3 | Elfogadva | 1ms | 316 KiB | ||||
| 4 | Elfogadva | 1ms | 316 KiB | ||||
| 5 | Elfogadva | 2ms | 316 KiB | ||||
| 6 | Elfogadva | 1ms | 316 KiB | ||||
| 7 | Elfogadva | 1ms | 396 KiB | ||||
| 8 | Elfogadva | 1ms | 316 KiB | ||||
| 9 | Elfogadva | 1ms | 316 KiB | ||||
| 10 | Elfogadva | 1ms | 316 KiB | ||||
| subtask3 | 12/12 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Elfogadva | 1ms | 332 KiB | ||||
| 3 | Elfogadva | 1ms | 316 KiB | ||||
| 4 | Elfogadva | 1ms | 500 KiB | ||||
| subtask4 | 16/16 | ||||||
| 1 | Elfogadva | 1ms | 316 KiB | ||||
| 2 | Elfogadva | 2ms | 316 KiB | ||||
| 3 | Elfogadva | 1ms | 316 KiB | ||||
| 4 | Elfogadva | 2ms | 316 KiB | ||||
| 5 | Elfogadva | 1ms | 316 KiB | ||||
| 6 | Elfogadva | 1ms | 508 KiB | ||||
| 7 | Elfogadva | 1ms | 500 KiB | ||||
| 8 | Elfogadva | 1ms | 316 KiB | ||||
| 9 | Elfogadva | 1ms | 508 KiB | ||||
| 10 | Elfogadva | 1ms | 316 KiB | ||||
| subtask5 | 50/50 | ||||||
| 1 | Elfogadva | 10ms | 1844 KiB | ||||
| 2 | Elfogadva | 1ms | 564 KiB | ||||
| 3 | Elfogadva | 13ms | 2100 KiB | ||||
| 4 | Elfogadva | 8ms | 3124 KiB | ||||
| 5 | Elfogadva | 129ms | 16836 KiB | ||||
| 6 | Elfogadva | 119ms | 16892 KiB | ||||
| 7 | Elfogadva | 52ms | 16916 KiB | ||||
| 8 | Elfogadva | 127ms | 16948 KiB | ||||
| 9 | Elfogadva | 143ms | 21420 KiB | ||||
| 10 | Elfogadva | 54ms | 16900 KiB | ||||