제출 #383264

#제출 시각아이디문제언어결과실행 시간메모리
383264MODDIAwesome Arrowland Adventure (eJOI19_adventure)C++14
50 / 100
37 ms7020 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]; map<pii, int> id; 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[id[mp(n-1,m-1)]] == 1e9) cout<<-1<<endl; else cout<<dist[id[mp(n-1,m-1)]]<<endl; } int main(){ cin>>n>>m; int cnt = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ cin>>mat[i][j]; id[mp(i,j)] = cnt; cnt++; } } 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[id[mp(i,j)]].pb(mp(id[mp(i - 1, j)], 0)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<0<<endl; } if(in_range(i + 1, j)){ G[id[mp(i,j)]].pb(mp(id[mp(i + 1, j)], 2)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<2<<endl; } if(in_range(i, j + 1)) { G[id[mp(i,j)]].pb(mp(id[mp(i, j + 1)], 1)); //cout<<id[mp(i,j)]<<" "<<id[mp(i,j + 1)]<<" "<<1<<endl; } if(in_range(i, j - 1)){ G[id[mp(i,j)]].pb(mp(id[mp(i, 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[id[mp(i,j)]].pb(mp(id[mp(i - 1, j)], 3)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<3<<endl; } if(in_range(i + 1, j)){ G[id[mp(i,j)]].pb(mp(id[mp(i + 1, j)], 1)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<1<<endl; } if(in_range(i, j + 1)) { G[id[mp(i,j)]].pb(mp(id[mp(i, j + 1)], 0)); //cout<<id[mp(i,j)]<<" "<<id[mp(i,j + 1)]<<" "<<0<<endl; } if(in_range(i, j - 1)){ G[id[mp(i,j)]].pb(mp(id[mp(i, 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[id[mp(i,j)]].pb(mp(id[mp(i - 1, j)], 2)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<2<<endl; } if(in_range(i + 1, j)){ G[id[mp(i,j)]].pb(mp(id[mp(i + 1, j)], 0)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<0<<endl; } if(in_range(i, j + 1)) { G[id[mp(i,j)]].pb(mp(id[mp(i, j + 1)], 3)); } if(in_range(i, j - 1)){ G[id[mp(i,j)]].pb(mp(id[mp(i, j-1)], 1)); } } else if(mat[i][j]=='W'){ if(in_range(i - 1, j)){ G[id[mp(i,j)]].pb(mp(id[mp(i - 1, j)], 1)); //cout<<id[mp(i,j)]<<" "<<id[mp(i - 1,j)]<<" "<<1<<endl; } if(in_range(i + 1, j)){ G[id[mp(i,j)]].pb(mp(id[mp(i + 1, j)], 3)); //cout<<id[mp(i,j)]<<" "<<id[mp(i + 1,j)]<<" "<<3<<endl; } if(in_range(i, j + 1)) { G[id[mp(i,j)]].pb(mp(id[mp(i, j + 1)], 2)); } if(in_range(i, j - 1)){ G[id[mp(i,j)]].pb(mp(id[mp(i, 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...