Submission #976831

#TimeUsernameProblemLanguageResultExecution timeMemory
976831vjudge1Awesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
85 ms10036 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define fi first
#define sec second
#define pii pair<ll,ll>
 
const ll N = 1e5 + 5;
const ll MOD = 1e9 + 7;

char grid[505][505];
ll dist[505][505];
ll dx[] = {-1,0,1,0};
ll dy[] = {0,1,0,-1};
ll cost(char cur, ll i){
	if(cur == 'N'){
		return i;
	}
	if(cur == 'S'){
		if(i == 2) return 0;
		if(i == 3) return 1;
		if(i == 0) return 2;
		if(i == 1) return 3;
	}
	if(cur == 'W'){
		if(i == 3) return 0;
		if(i == 0) return 1;
		if(i == 1) return 2;
		if(i == 2) return 3;
	}
	if(cur == 'E'){
		if(i == 1) return 0;
		if(i == 2) return 1;
		if(i == 3) return 2;
		if(i == 0) return 3;
	}
}
signed main(){
	ios_base::sync_with_stdio(false); cin.tie(nullptr);
	ll tc = 1;
	// cin >> tc;
	while(tc--){
		ll n,m; cin >> n >> m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin >> grid[i][j];
				dist[i][j] = 1e18;
			}
		}
		priority_queue<pair<ll,pii>,vector<pair<ll,pii>>,greater<pair<ll,pii>>> pq;
		pq.push({0, {1,1}});
		dist[1][1] = 0;
		while(!pq.empty()){
			auto x = pq.top(); pq.pop();
			if(dist[x.sec.fi][x.sec.sec] < x.fi || grid[x.sec.fi][x.sec.sec] == 'X') continue;
			for(int i=0;i<4;i++){
				 ll newi = x.sec.fi + dx[i], newj = x.sec.sec + dy[i];
				 ll now = cost(grid[x.sec.fi][x.sec.sec], i);
				 if(newi < 1 || newj < 1 || newi > n || newj > m || dist[newi][newj] <= dist[x.sec.fi][x.sec.sec] + now){
				 	continue;
				 }
				 dist[newi][newj] = dist[x.sec.fi][x.sec.sec] + now;
				 pq.push({dist[newi][newj], {newi, newj}});
			}
		}
		cout << (dist[n][m] == 1e18 ? -1 : dist[n][m]) << endl;
	}
}

Compilation message (stderr)

adventure.cpp: In function 'long long int cost(char, long long int)':
adventure.cpp:38:1: warning: control reaches end of non-void function [-Wreturn-type]
   38 | }
      | ^
#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...