Submission #976732

#TimeUsernameProblemLanguageResultExecution timeMemory
976732vjudge1Awesome Arrowland Adventure (eJOI19_adventure)C++17
100 / 100
62 ms20928 KiB
#include<bits/stdc++.h>
#define ll long long
#define endl "\n"
#define fi first
#define se second
#define pb push_back
#define pll pair<long long, long long>
using namespace std;
ll mv_x[] = {-1,0,1,0};
ll mv_y[] = {0,1,0,-1};
map<char,ll> mp;
ll n,m;
ll arr[1000][1000];
ll visited[1000][1000];

void dijkstra(){
	using plll = pair<ll,pll>;
	priority_queue<plll, vector<plll>, greater<plll>> pq;
	pq.push({0,{1,1}});
	while(!pq.empty()){
		ll cost = pq.top().fi;
		ll x = pq.top().se.fi;
		ll y = pq.top().se.se;
		pq.pop();
		if(visited[x][y]!=-1) continue;
		visited[x][y] = cost;
		if(x==n&&y==m) break;
		if(arr[x][y]==-1) continue;
		for(int i=0;i<=3;i++){
			ll idx = (arr[x][y] + i)%4;
			ll new_x = x + mv_x[idx];
			ll new_y = y + mv_y[idx];
			if(visited[new_x][new_y]!=-1) continue;
			if(new_x<1||new_x>n) continue;
			if(new_y<1||new_y>m) continue;
			pq.push({cost+i,{new_x,new_y}});
		}
	}
}

void solve(){
	cin >> n >> m;
	mp['N'] = 0;
	mp['E'] = 1;
	mp['S'] = 2;
	mp['W'] = 3;
	mp['X'] = -1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char c;
			cin >> c;
			arr[i][j] = mp[c];
		}
	}
	memset(visited,-1,sizeof visited);
	dijkstra();
//	for(int i=1;i<=n;i++){
//		for(int j=1;j<=m;j++){
//			cout << visited[i][j] << ' ';
//		}
//		cout << endl;
//	}
	cout << visited[n][m] << endl;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int tc = 1;
//	cin >> tc;
	while(tc--){
	   solve();
	}
}

#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...