Submission #446765

#TimeUsernameProblemLanguageResultExecution timeMemory
446765fuad27Awesome Arrowland Adventure (eJOI19_adventure)C++14
100 / 100
261 ms15268 KiB
    #include <bits/stdc++.h>
    #define MAX 600
    using namespace std;
    int g[MAX][MAX],dist[MAX][MAX],dx[4]={0,1,0,-1},dy[4]={-1,0,1,0},n,m;
    void dijkstra()
    {
    	for(int i=0;i<n;i++) for(int j=0;j<m;j++) dist[i][j]=-1;
    	priority_queue<pair<int,pair<int,int>>,vector<pair<int,pair<int,int>> >, greater<pair<int,pair<int,int> > > > pq;
    	pq.push(make_pair(0,make_pair(0,0)));
    	while(!pq.empty())
    	{
    		int x=pq.top().second.first,y=pq.top().second.second,c=pq.top().first;
    		pq.pop();
    		if(x<0 || x>=m || y<0 || y>=n || dist[y][x]!=-1) continue;
    		dist[y][x]=c;
    		if(g[y][x]==-1) continue;
    		for(int i=0;i<4;i++) pq.push(make_pair(c+i,make_pair(x+dx[(g[y][x]+i)%4],y+dy[(g[y][x]+i)%4])));
    	}
    }
    int main()
    {
    	cin>>n>>m;
    	for(int i=0;i<n;i++) for(int j=0;j<m;j++)
    	{
    		char c; cin>>c;
    		if(c=='N') g[i][j]=0;
    		if(c=='E') g[i][j]=1;
    		if(c=='S') g[i][j]=2;
    		if(c=='W') g[i][j]=3;
    		if(c=='X') g[i][j]=-1;
    	}
    	dijkstra();
    	cout<<dist[n-1][m-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...