답안 #769469

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
769469 2023-06-29T15:39:13 Z GordonRemzi007 Awesome Arrowland Adventure (eJOI19_adventure) C++17
100 / 100
71 ms 5696 KB
#include <iostream>
#include <vector>
#include <queue>
#include <climits>

using namespace std;

int n, m, val;
string str;
pair<int,int> y;
pair<int, pair<int,int>> x;
priority_queue<pair<int, pair<int,int>>> pq;
vector<pair<int,int>> dir = {
    {0, 1},
    {1, 0},
    {0, -1},
    {-1, 0}
};

int main() {
    cin >> n >> m;
    vector<vector<int>> a(n, vector<int>(m)), path(n, vector<int>(m, INT_MAX));
    for(int i = 0; i < n; i++) {
        cin >> str;
        for(int j = 0; j < m; j++) {
            switch(str[j]) {
                case 'N':
                    a[i][j] = 3;
                    break;
                case 'E':
                    a[i][j] = 0;
                    break;
                case 'S':
                    a[i][j] = 1;
                    break;
                case 'W':
                    a[i][j] = 2;
                    break;
                default: 
                    a[i][j] = -1;
                    break;
            }
        }
    }
    if(a[0][0] != -1) pq.push({0, {0, 0}});
    while(pq.size()) {
        x = pq.top();
        pq.pop();
        x.first = -x.first;
        if(x.first >= path[x.second.first][x.second.second]) continue;
        //cout << x.first << " " << x.second.first << " " << x.second.second << "\n";
        path[x.second.first][x.second.second] = x.first;
        for(int i = 0; i < dir.size(); i++) {
            y = x.second;
            y.first+=dir[i].first;
            y.second+=dir[i].second;
            if(y.first < 0 || y.first > n-1 || y.second < 0 || y.second > m-1 || (a[y.first][y.second] == -1 && (y.first != n-1 || y.second != m-1))) continue;
            val = (4-a[x.second.first][x.second.second]+i)%4;
            //cout << "VAL " << val << " " << a[x.second.first][x.second.second] << " " << i << "\n";
            if(path[x.second.first][x.second.second]+val < path[y.first][y.second]) pq.push({-(path[x.second.first][x.second.second]+val), y}); 
        }
    }
    if(path[n-1][m-1] == INT_MAX) cout << "-1\n";
    else cout << path[n-1][m-1] << "\n";
}

Compilation message

adventure.cpp: In function 'int main()':
adventure.cpp:53:26: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   53 |         for(int i = 0; i < dir.size(); i++) {
      |                        ~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 272 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 212 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 212 KB Output is correct
11 Correct 0 ms 212 KB Output is correct
12 Correct 0 ms 212 KB Output is correct
13 Correct 0 ms 212 KB Output is correct
14 Correct 0 ms 212 KB Output is correct
15 Correct 0 ms 212 KB Output is correct
16 Correct 0 ms 212 KB Output is correct
17 Correct 0 ms 212 KB Output is correct
18 Correct 0 ms 212 KB Output is correct
19 Correct 0 ms 272 KB Output is correct
20 Correct 0 ms 212 KB Output is correct
21 Correct 0 ms 212 KB Output is correct
22 Correct 0 ms 212 KB Output is correct
23 Correct 0 ms 212 KB Output is correct
24 Correct 0 ms 212 KB Output is correct
25 Correct 0 ms 212 KB Output is correct
26 Correct 0 ms 212 KB Output is correct
27 Correct 0 ms 212 KB Output is correct
28 Correct 0 ms 212 KB Output is correct
29 Correct 0 ms 212 KB Output is correct
30 Correct 0 ms 212 KB Output is correct
31 Correct 0 ms 212 KB Output is correct
32 Correct 0 ms 212 KB Output is correct
33 Correct 0 ms 212 KB Output is correct
34 Correct 0 ms 212 KB Output is correct
35 Correct 5 ms 508 KB Output is correct
36 Correct 1 ms 212 KB Output is correct
37 Correct 6 ms 556 KB Output is correct
38 Correct 2 ms 596 KB Output is correct
39 Correct 56 ms 2564 KB Output is correct
40 Correct 59 ms 2564 KB Output is correct
41 Correct 6 ms 2516 KB Output is correct
42 Correct 58 ms 2568 KB Output is correct
43 Correct 71 ms 5696 KB Output is correct
44 Correct 7 ms 2532 KB Output is correct