Submission #447294

#TimeUsernameProblemLanguageResultExecution timeMemory
447294AgnimandurAwesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
122 ms24320 KiB
#include <bits/stdc++.h> #define ll long long #define sz(x) ((int) (x).size()) #define all(x) (x).begin(), (x).end() #define vi vector<int> #define vvi vector<vector<int>> #define vvl vector<vector<long long>> #define vl vector<long long> #define pii pair<int, int> #define pll pair<ll,ll> #define add push_back #define REP(i,a) for (int i = 0; i < (a); i++) using namespace std; template<typename T> using minpq = priority_queue<T, vector<T>, greater<T>>; const int INF = 1005000000; //const ll MOD = 1000000007LL; const ll MOD = 998244353LL; int ni() { int x; cin >> x; return x; } ll nl() { ll x; cin >> x; return x; } double nd() { double x; cin >> x; return x; } string next() { string x; cin >> x; return x; } struct Dijkstra { vector<vector<pii>> graph; int N; Dijkstra(int N) { graph.assign(N,vector<pii>{}); this->N=N; } void addEdge(int u, int v, int w) { graph[u].add(make_pair(v,w)); } vl dijkstra(int root) { ll INF = 1000000000000000000LL; vl dists(N); dists.assign(N, INF); dists[root] = 0LL; minpq<pair<ll,int>> q; q.push({0LL, root}); while (!q.empty()) { int v = q.top().second; ll d_v = q.top().first; q.pop(); for (auto edge : graph[v]) { int to = edge.first; ll len = edge.second; if (d_v + len < dists[to]) { dists[to] = d_v + len; q.push({dists[to], to}); } } } return dists; } }; int main() { ios::sync_with_stdio(false); cin.tie(0); int N = ni(); int M = ni(); Dijkstra graph(N*M); string dir = "NESW"; vvi dirs = {{-1,0},{0,1},{1,0},{0,-1}}; REP(i,N) { string row = next(); REP(j,M) { string c = row.substr(j,1); if (c=="X") continue; int x = i*M+j; int p = dir.find(c); REP(d,4) { int e = (d+p)%4; int newI = i+dirs[e][0]; int newJ = j+dirs[e][1]; if (newI >= 0 && newI < N && newJ >= 0 && newJ < M) { int y = newI*M+newJ; graph.addEdge(x,y,d); } } } } vl dists = graph.dijkstra(0); ll ans = dists[N*M-1]; if (ans > 2000) ans = -1; cout << ans; }
#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...