Submission #1250045

#TimeUsernameProblemLanguageResultExecution timeMemory
1250045PetrixAwesome Arrowland Adventure (eJOI19_adventure)C++20
100 / 100
176 ms14756 KiB
#include <iostream>
#include <queue>
using namespace std;

int dir[501][501],n,m;
int dist[501][501];
int ml[]={0,1,0,-1};
int mc[]={-1,0,1,0};

priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>>>,greater<pair<int,pair<int,int>>>> q;

bool in(int l,int c){
    return (l>=0 && c>=0 && l<n && c<m);
}

int main()
{
    int i,j,l,c,cost;
    char ch;
	cin>>n>>m;
	for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            cin>>ch;
            if(ch=='X') dir[i][j]=-1;
            else if(ch=='N') dir[i][j]=0;
            else if(ch=='E') dir[i][j]=1;
            else if(ch=='S') dir[i][j]=2;
            else if(ch=='W') dir[i][j]=3;
        }
	}
	for(i=0;i<n;i++) for(j=0;j<m;j++) dist[i][j]=-1;
	q.push({0,{0,0}});
	while(!q.empty()){
        auto it=q.top();q.pop();
		l=it.second.first;
        c=it.second.second;
        cost=it.first;
		if(!in(c,l) || dist[c][l]!=-1) continue;
		dist[c][l]=cost;
		if(dir[c][l]==-1) continue;
		for(i=0;i<4;i++){
            q.push({cost+i,{l+ml[(dir[c][l]+i)%4],c+mc[(dir[c][l]+i)%4]}});
		}
	}
	cout<<dist[n-1][m-1];
	return 0;
}
#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...