Submission #975987

#TimeUsernameProblemLanguageResultExecution timeMemory
975987vjudge1Awesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
51 ms11972 KiB
#include <bits/stdc++.h> #define int long long #define f first #define s second #define pb push_back #define endl '\n' using namespace std; int N,M,a[505][505]; int cost[505][505]; pair<int, int> dir[4]; map<char, int> ma; char c; priority_queue<pair<int, pair<int, int>>, vector<pair<int, pair<int, int>>>, greater<pair<int, pair<int, int>>>> p; void solve() { cin >> N >> M; ma['N'] = 0; ma['E'] = 1; ma['S'] = 2; ma['W'] = 3; ma['X'] = -1; dir[0] = {-1, 0}; dir[1] = {0, 1}; dir[2] = {1, 0}; dir[3] = {0, -1}; for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { cin >> c; a[i][j] = ma[c]; cost[i][j] = 1e9; } } cost[1][1] = 0; p.push({0, {1, 1}}); while (!p.empty()) { int cur = p.top().f; int icur = p.top().s.f; int jcur = p.top().s.s; // cout << cur << ' ' << icur << ' ' << jcur << endl; p.pop(); if (icur == N && jcur == M) { cout << cur << endl; return; } if (a[icur][jcur] == -1) continue; if (cur > cost[icur][jcur]) continue; for (int cst = 0; cst < 4; cst++) { auto dr = dir[(a[icur][jcur] + cst) % 4]; int inxt = icur + dr.f; int jnxt = jcur + dr.s; int cnxt = cur + cst; if (inxt >= 1 && inxt <= N && jnxt >= 1 && jnxt <= M && cost[inxt][jnxt] > cnxt) { cost[inxt][jnxt] = cnxt; p.push({cnxt, {inxt, jnxt}}); } } } cout << -1 << endl; } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); int tttt = 1; // cin >> tttt; while (tttt--) solve(); }
#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...