답안 #976831

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
976831 2024-05-07T07:20:58 Z vjudge1 Awesome Arrowland Adventure (eJOI19_adventure) C++17
100 / 100
85 ms 10036 KB
#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

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 | }
      | ^
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2516 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2516 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 1 ms 2396 KB Output is correct
15 Correct 1 ms 2392 KB Output is correct
16 Correct 1 ms 2396 KB Output is correct
17 Correct 1 ms 2392 KB Output is correct
18 Correct 1 ms 2396 KB Output is correct
19 Correct 1 ms 2396 KB Output is correct
20 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2392 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2396 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2396 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 1 ms 2396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 2392 KB Output is correct
2 Correct 1 ms 2396 KB Output is correct
3 Correct 1 ms 2396 KB Output is correct
4 Correct 1 ms 2396 KB Output is correct
5 Correct 1 ms 2396 KB Output is correct
6 Correct 1 ms 2516 KB Output is correct
7 Correct 1 ms 2396 KB Output is correct
8 Correct 1 ms 2396 KB Output is correct
9 Correct 1 ms 2396 KB Output is correct
10 Correct 2 ms 2396 KB Output is correct
11 Correct 1 ms 2396 KB Output is correct
12 Correct 1 ms 2396 KB Output is correct
13 Correct 1 ms 2396 KB Output is correct
14 Correct 1 ms 2396 KB Output is correct
15 Correct 1 ms 2392 KB Output is correct
16 Correct 1 ms 2396 KB Output is correct
17 Correct 1 ms 2392 KB Output is correct
18 Correct 1 ms 2396 KB Output is correct
19 Correct 1 ms 2396 KB Output is correct
20 Correct 1 ms 2396 KB Output is correct
21 Correct 1 ms 2396 KB Output is correct
22 Correct 1 ms 2396 KB Output is correct
23 Correct 1 ms 2396 KB Output is correct
24 Correct 1 ms 2392 KB Output is correct
25 Correct 1 ms 2396 KB Output is correct
26 Correct 1 ms 2396 KB Output is correct
27 Correct 1 ms 2396 KB Output is correct
28 Correct 1 ms 2396 KB Output is correct
29 Correct 1 ms 2396 KB Output is correct
30 Correct 1 ms 2396 KB Output is correct
31 Correct 1 ms 2396 KB Output is correct
32 Correct 1 ms 2396 KB Output is correct
33 Correct 1 ms 2396 KB Output is correct
34 Correct 1 ms 2396 KB Output is correct
35 Correct 5 ms 2652 KB Output is correct
36 Correct 1 ms 2524 KB Output is correct
37 Correct 5 ms 2652 KB Output is correct
38 Correct 1 ms 2652 KB Output is correct
39 Correct 43 ms 2996 KB Output is correct
40 Correct 44 ms 2908 KB Output is correct
41 Correct 3 ms 2904 KB Output is correct
42 Correct 48 ms 2996 KB Output is correct
43 Correct 85 ms 10036 KB Output is correct
44 Correct 3 ms 3160 KB Output is correct