Submission #383266

#TimeUsernameProblemLanguageResultExecution timeMemory
383266MODDIAwesome Arrowland Adventure (eJOI19_adventure)C++14
50 / 100
9 ms3564 KiB
#include <bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define vi vector<int> #define vl vector<ll> #define mp make_pair #define pb push_back using namespace std; int n, m; char mat[501][501]; vector<pii> G[25000]; bool in_range(int i, int j){ if(i >= 0 && i < n && j >= 0 && j < m) return true; return false; } void dijkstra(){ int dist[25001]; for(int i = 0; i < 25001; i++) { dist[i] = 1e9; } priority_queue<pii> pq; pq.push(mp(0,0)); dist[0] = 0; while(!pq.empty()){ pii state = pq.top(); pq.pop(); for(auto next : G[state.second]){ int next_city = next.first, len = next.second; if(dist[next_city] > dist[state.second] + len){ dist[next_city] = dist[state.second] + len; pq.push(mp(-dist[next_city], next_city)); } } } if(dist[(n - 1) * m + m-1] == 1e9) cout<<-1<<endl; else cout<<dist[(n - 1) * m + m-1]<<endl; } int main(){ cin>>n>>m; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin>>mat[i][j]; } } for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(mat[i][j]=='X') continue; else if(mat[i][j]=='N'){ if(in_range(i - 1, j)){ G[i * m + j].pb(mp((i-1)*m + j, 0)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<0<<endl; } if(in_range(i + 1, j)){ G[i * m + j].pb(mp((i+1)*m + j, 2)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<2<<endl; } if(in_range(i, j + 1)) { G[i * m + j].pb(mp(i*m + j + 1, 1)); //cout<<id[mp(i,j)]<<" "<<id[mp(i,j + 1)]<<" "<<1<<endl; } if(in_range(i, j - 1)){ G[i * m + j].pb(mp(i*m + j-1, 3)); //cout<<id[mp(i,j)]<<" "<<id[mp(i,j-1)]<<" "<<3<<endl; } } else if(mat[i][j]=='E'){ if(in_range(i - 1, j)){ G[i * m + j].pb(mp((i-1)*m + j, 3)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<3<<endl; } if(in_range(i + 1, j)){ G[i * m + j].pb(mp((i+1)*m + j, 1)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<1<<endl; } if(in_range(i, j + 1)) { G[i * m + j].pb(mp(i*m + j+1, 0)); //cout<<id[mp(i,j)]<<" "<<id[mp(i,j + 1)]<<" "<<0<<endl; } if(in_range(i, j - 1)){ G[i * m + j].pb(mp(i*m + j -1, 2)); //cout<<id[mp(i,j)]<<" "<<id[mp(i,j-1)]<<" "<<3<<endl; } } else if(mat[i][j]=='S'){ if(in_range(i - 1, j)){ G[i * m + j].pb(mp((i-1)*m + j, 2)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<2<<endl; } if(in_range(i + 1, j)){ G[i * m + j].pb(mp((i+1)*m + j, 0)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<0<<endl; } if(in_range(i, j + 1)) { G[i * m + j].pb(mp(i*m + j+1, 3)); } if(in_range(i, j - 1)){ G[i * m + j].pb(mp(i*m + j-1, 1)); } } else if(mat[i][j]=='W'){ if(in_range(i - 1, j)){ G[i * m + j].pb(mp((i-1)*m + j, 1)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<1<<endl; } if(in_range(i + 1, j)){ G[i * m + j].pb(mp((i+1)*m + j, 3)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<3<<endl; } if(in_range(i, j + 1)) { G[i * m + j].pb(mp(i*m + j + 1, 2)); } if(in_range(i, j - 1)){ G[i * m + j].pb(mp(i*m + j-1, 0)); } } else { assert(false); } } } dijkstra(); }
#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...