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...