Submission #1350893

#TimeUsernameProblemLanguageResultExecution timeMemory
1350893vjudge1Awesome Arrowland Adventure (eJOI19_adventure)C++20
100 / 100
60 ms32120 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
int main(){
    ll n,m;
    cin>>n>>m;
    vector<vector<char>> V(n,vector<char>(m));
    vector<vector<pair<ll,ll>>> adj(n*m);
    map<char,ll> value;
    value['S']=0;
    value['E']=3;
    value['N']=2;
    value['W']=1;
    value['X']=1e17;
    ll nodo=0;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        for(int j=0;j<m;j++){
            V[i][j]=s[j];
            if(V[i][j]=='X'){
                nodo++;
                continue;
            }
            if(i>0){
                ll distancia=(2-value[V[i][j]]+4)%4;
                adj[nodo].push_back({nodo-m,distancia});
            }
            if(j>0){
                ll distancia=(1-value[V[i][j]]+4)%4;
                adj[nodo].push_back({nodo-1,distancia});
            }
            if(i<n-1){
                ll distancia=(0-value[V[i][j]]+4)%4;
                adj[nodo].push_back({nodo+m,distancia});
            }
            if(j<m-1){
                ll distancia=(3-value[V[i][j]]+4)%4;
                adj[nodo].push_back({nodo+1,distancia});
            }
            nodo++;
        }
    }
    vector<ll> dist(n*m,1e17);
    dist[0]=0;
    priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> Q;
    Q.push({0,0});
    while(!Q.empty()){
        ll node=Q.top().second;
        ll w=Q.top().first;
        Q.pop();
        if(w>dist[node]){
            continue;
        }
        for(auto x:adj[node]){
            ll peso=x.second;
            ll goin=x.first;
            if(dist[node]+peso<dist[goin]){
                dist[goin]=dist[node]+peso;
                Q.push({dist[goin],goin});
            }
        }
    }
    if(dist[n*m-1]==1e17){
        dist[n*m-1]=-1;
    }
    cout<<dist[n*m-1]<<endl;
}
#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...