답안 #440562

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
440562 2021-07-02T13:01:42 Z raid Awesome Arrowland Adventure (eJOI19_adventure) C++17
100 / 100
94 ms 4988 KB
#include <iostream>
#include <tuple>
#include <queue>

using namespace std;

const int DIM = 505;
const int INF = 2e9;

char T[DIM][DIM];
priority_queue<tuple<int, int, int>> q;
int dist[DIM][DIM];
 
int dx[] = { 0, -1, 0, 1 };
int dy[] = { -1, 0, 1, 0 };

int costRot( int d1, int d2 ) { // d1 -> d2
  int ret = 0;
  while ( d1 != d2 ) {
	d1 = (d1 + 1) % 4;
    ++ret;
  }
  return ret;
}

void dijkstra() {
  int i, j;
  q.push({ 0, 1, 1 });
  dist[1][1] = 0;
  while ( !q.empty() ) {
	i = get<1>(q.top());
	j = get<2>(q.top());
	q.pop();
	if ( T[i][j] != -2 ) {
	  for ( int d = 0; d < 4; ++d ) {
	    int ni = i + dx[d]; 
	    int nj = j + dy[d];
		if ( T[i][j] != -1 ) {
	      int cost = costRot( T[i][j], d );
	      if ( dist[i][j] + cost < dist[ni][nj] ) {
		    dist[ni][nj] = dist[i][j] + cost; 
		    q.push({ -dist[ni][nj], ni, nj });
	      }
		}
	  }
	}
  }
}

int main() {
  int n, m;

  cin >> n >> m;
  for ( int i = 1; i <= n; ++i ) {
	cin >> (T[i] + 1);
	for ( int j = 1; j <= m; ++j ) {
      if ( T[i][j] == 'W' ) {
		T[i][j] = 0;
	  } else if ( T[i][j] == 'N' ) {
        T[i][j] = 1;
	  } else if ( T[i][j] == 'E' ) {
	    T[i][j] = 2;
	  } else if ( T[i][j] == 'S' ) {
        T[i][j] = 3;
	  } else {
		T[i][j] = -2;
	  }
	  dist[i][j] = INF;
	}
  }
  for ( int i = 0; i <= n + 1; ++i ) {
	T[i][0] = T[i][m + 1] = -1;
  }
  for ( int j = 0; j <= m + 1; ++j ) {
	T[0][j] = T[n + 1][j] = -1;
  }
  dijkstra();
  if ( dist[n][m] != INF ) {
    cout << dist[n][m] << "\n";
  } else {
	cout << "-1\n";
  }
  return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 312 KB Output is correct
6 Correct 0 ms 308 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 312 KB Output is correct
6 Correct 0 ms 308 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 0 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 0 ms 204 KB Output is correct
17 Correct 0 ms 312 KB Output is correct
18 Correct 0 ms 204 KB Output is correct
19 Correct 0 ms 204 KB Output is correct
20 Correct 1 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 0 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 1 ms 312 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 1 ms 204 KB Output is correct
6 Correct 0 ms 308 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 0 ms 204 KB Output is correct
10 Correct 0 ms 204 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 204 KB Output is correct
2 Correct 1 ms 204 KB Output is correct
3 Correct 0 ms 204 KB Output is correct
4 Correct 0 ms 204 KB Output is correct
5 Correct 0 ms 312 KB Output is correct
6 Correct 0 ms 308 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Correct 0 ms 204 KB Output is correct
9 Correct 1 ms 204 KB Output is correct
10 Correct 0 ms 204 KB Output is correct
11 Correct 0 ms 204 KB Output is correct
12 Correct 0 ms 204 KB Output is correct
13 Correct 1 ms 204 KB Output is correct
14 Correct 0 ms 204 KB Output is correct
15 Correct 0 ms 204 KB Output is correct
16 Correct 0 ms 204 KB Output is correct
17 Correct 0 ms 312 KB Output is correct
18 Correct 0 ms 204 KB Output is correct
19 Correct 0 ms 204 KB Output is correct
20 Correct 1 ms 204 KB Output is correct
21 Correct 0 ms 204 KB Output is correct
22 Correct 0 ms 204 KB Output is correct
23 Correct 0 ms 204 KB Output is correct
24 Correct 0 ms 204 KB Output is correct
25 Correct 1 ms 204 KB Output is correct
26 Correct 1 ms 312 KB Output is correct
27 Correct 1 ms 204 KB Output is correct
28 Correct 1 ms 204 KB Output is correct
29 Correct 1 ms 204 KB Output is correct
30 Correct 0 ms 308 KB Output is correct
31 Correct 0 ms 204 KB Output is correct
32 Correct 1 ms 204 KB Output is correct
33 Correct 0 ms 204 KB Output is correct
34 Correct 0 ms 204 KB Output is correct
35 Correct 7 ms 476 KB Output is correct
36 Correct 1 ms 332 KB Output is correct
37 Correct 6 ms 588 KB Output is correct
38 Correct 2 ms 972 KB Output is correct
39 Correct 62 ms 1808 KB Output is correct
40 Correct 61 ms 1800 KB Output is correct
41 Correct 8 ms 1784 KB Output is correct
42 Correct 70 ms 1804 KB Output is correct
43 Correct 94 ms 4988 KB Output is correct
44 Correct 8 ms 1740 KB Output is correct