제출 #1241309

#제출 시각아이디문제언어결과실행 시간메모리
1241309silence25Awesome Arrowland Adventure (eJOI19_adventure)C++20
38 / 100
22 ms460 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m;
map<pair<char,char>,ll>moves;
map<char,ll>ii;;
map<char,ll>jj;
vector<char>v={'E','S','W','N'};
const ll inf = 1e18;
char a[600][600];
ll dis[600][600];
int main(){
    moves[{'E','E'}]=0;
    moves[{'E','S'}]=1;
    moves[{'E','W'}]=2;
    moves[{'E','N'}]=3;
    moves[{'S','S'}]=0;
    moves[{'S','W'}]=1;
    moves[{'S','N'}]=2;
    moves[{'S','E'}]=3;
    moves[{'W','W'}]=0;
    moves[{'W','N'}]=1;
    moves[{'W','E'}]=2;
    moves[{'W','S'}]=3;
    moves[{'N','N'}]=0;
    moves[{'N','E'}]=1;
    moves[{'N','S'}]=2;
    moves[{'N','W'}]=3;
    ii['S']=1;
    jj['S']=0;
    ii['N']=-1;
    jj['N']=0;
    ii['W']=0;
    jj['W']=-1;
    ii['E']=0;
    jj['E']=1;
    cin>>n>>m;
    for(ll i=1;i<=n;i++){
        for(ll j=1;j<=m;j++){
            cin>>a[i][j];
            dis[i][j]=inf;
        }
    }
    priority_queue<pair<ll,pair<ll,ll>>>q;
    for(auto it:v){
            ll fi = 1+ii[it];
            ll fj = 1+jj[it];
            if(fi<1 || fi>n || fj<0 || fj>m){
                continue;
            }
            if(dis[fi][fj]>0+moves[{a[1][1],it}]){
                dis[fi][fj]=0+moves[{a[1][1],it}];
                q.push({dis[fi][fj],{fi,fj}});
            }
        }
    while(!q.empty()){
        ll i = q.top().second.first;
        ll j = q.top().second.second;
        ll k = q.top().first;
        q.pop();
        if(dis[i][j]<k || a[i][j]=='X'){
            continue;
        }
        for(auto it:v){
            ll fi = i+ii[it];
            ll fj = j+jj[it];
            if(fi<1 || fi>n || fj<0 || fj>m){
                continue;
            }
            if(dis[fi][fj]>k+moves[{a[i][j],it}]){
                dis[fi][fj]=k+moves[{a[i][j],it}];
                q.push({dis[fi][fj],{fi,fj}});
            }
        }
    }
    if(dis[n][m]!=inf){
        cout<<dis[n][m];
    }else{
        cout<<-1;
    }
}
#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...