Submission #760792

#TimeUsernameProblemLanguageResultExecution timeMemory
760792bachhoangxuanAwesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
51 ms5716 KiB
#include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define piii pair<int,pii> #define fi first #define se second #define maxn 505 int n,m,d[maxn][maxn],dist[maxn][maxn]; int dx[]={-1,0,1,0}, dy[]={0,1,0,-1}; signed main() { ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); cin >> n >> m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ char c;cin >> c;dist[i][j]=INT_MAX; if(c=='N') d[i][j]=0; else if(c=='E') d[i][j]=1; else if(c=='S') d[i][j]=2; else if(c=='W') d[i][j]=3; else d[i][j]=-1; } } priority_queue<piii,vector<piii>,greater<piii>> pq; dist[1][1]=0; pq.push({0,{1,1}}); while(!pq.empty()){ int x=pq.top().se.fi,y=pq.top().se.se,len=pq.top().fi;pq.pop(); if(dist[x][y]!=len) continue; if(x==n && y==m){ cout << len << '\n'; return 0; } if(d[x][y]==-1) continue; for(int t=0;t<4;t++){ int add=(4+t-d[x][y])%4,xt=x+dx[t],yt=y+dy[t]; if(yt<=0 || xt<=0 || xt>n || yt>m) continue; if(add+len<dist[xt][yt]){ dist[xt][yt]=add+len; pq.push({add+len,{xt,yt}}); } } } cout << -1 << '\n'; }
#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...