CSES - Datatähti 2025 loppu - Results
Submission details
Task:Suunnistus
Sender:vgtcross
Submission time:2025-01-18 14:40:14 +0200
Language:C++ (C++20)
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED31
#2ACCEPTED12
#3ACCEPTED57
Test results
testverdicttimegroup
#1ACCEPTED0.01 s3details
#2ACCEPTED0.03 s1, 2, 3details
#3ACCEPTED0.03 s1, 2, 3details
#4ACCEPTED0.01 s1, 2, 3details
#5ACCEPTED0.01 s1, 2, 3details
#6ACCEPTED0.01 s1, 2, 3details
#7ACCEPTED0.24 s2, 3details
#8ACCEPTED0.26 s2, 3details
#9ACCEPTED0.01 s2, 3details
#10ACCEPTED0.42 s3details
#11ACCEPTED0.44 s3details
#12ACCEPTED0.05 s3details
#13ACCEPTED0.27 s3details
#14ACCEPTED0.04 s2, 3details
#15ACCEPTED0.01 s3details
#16ACCEPTED0.01 s3details
#17ACCEPTED0.03 s2, 3details

Code

#include <bits/stdc++.h>

#define debug(x) cout << #x << ": " << x << endl
#define fi first
#define se second
#define all(x) begin(x),end(x)
#define rall(x) rbegin(x),rend(x)

using namespace std;
using ll = long long;
using pii = pair<int, int>;

const int N = 505;

char g[N][N];
int dis[N][N];

int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

void solve() {
    int n, m, k;
    cin >> n >> m >> k;

    vector<vector<pii>> rd(k+2);
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < m; ++j) {
            char c;
            cin >> c;

            if (c == 'S') rd[0].push_back({i, j});
            else if (c == 'E') rd[k+1].push_back({i, j});
            else if ('1' <= c && c <= '9') rd[c-'0'].push_back({i, j});

            if (c != '#') c = '.';
            g[i][j] = c;
        }
    }

    memset(dis, 0, sizeof dis);
    dis[rd[0][0].fi][rd[0][0].se] = 1;
    for (int a = 0; a < k+1; ++a) {
        for (auto &p : rd[a]) {
            dis[p.fi][p.se] *= -1;
        }
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (dis[i][j] >= 0) dis[i][j] = 1e9;
            }
        }
        priority_queue<array<int, 3>> pq;
        for (auto &p : rd[a]) {
            pq.push({dis[p.fi][p.se], p.fi, p.se});
            dis[p.fi][p.se] *= -1;
        }

        while (pq.size()) {
            auto p = pq.top();
            pq.pop();
            if (dis[p[1]][p[2]] < -p[0]) continue;
            dis[p[1]][p[2]] = -p[0];
            for (int i = 0; i < 4; ++i) {
                int x = p[1] + dx[i];
                int y = p[2] + dy[i];
                if (x >= 0 && x < n && y >= 0 && y < m && g[x][y] == '.') {
                    if (dis[x][y] > -p[0] + 1) {
                        pq.push({p[0] - 1, x, y});
                        dis[x][y] = -p[0] + 1;
                    }
                }
            }
        }
    }

    int ans = dis[rd[k+1][0].fi][rd[k+1][0].se]-1;
    cout << (ans > 1e8 ? -1 : ans) << '\n';
}

int main() {
    cin.tie(0) -> sync_with_stdio(0);

    solve();
}

Test details

Test 1

Group: 3

Verdict: ACCEPTED

input
10 10 9
S293#35616
#662963731
54975451#7
5162589168
...

correct output
25

user output
25

Test 2

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 500 0
.................................

correct output
301

user output
301

Test 3

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 500 0
.#.........#.#..##..#............

correct output
253

user output
253

Test 4

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 500 0
...#......##.##.#.#..##..#..##...

correct output
-1

user output
-1

Test 5

Group: 1, 2, 3

Verdict: ACCEPTED

input
500 1 0
.
.
.
.
...

correct output
77

user output
77

Test 6

Group: 1, 2, 3

Verdict: ACCEPTED

input
1 500 0
.................................

correct output
166

user output
166

Test 7

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
.................................

correct output
3447

user output
3447

Test 8

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
.#........#..................#...

correct output
4952

user output
4952

Test 9

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
##.########.##########.#..#......

correct output
-1

user output
-1

Test 10

Group: 3

Verdict: ACCEPTED

input
500 500 9
623475428948841896621266296765...

correct output
205

user output
205

Test 11

Group: 3

Verdict: ACCEPTED

input
500 500 9
7##814125813#3463#272134469457...

correct output
157

user output
157

Test 12

Group: 3

Verdict: ACCEPTED

input
500 500 9
##67##36##5#3###67###8972#61##...

correct output
-1

user output
-1

Test 13

Group: 3

Verdict: ACCEPTED

input
500 500 9
....................#...#........

correct output
1313

user output
1313

Test 14

Group: 2, 3

Verdict: ACCEPTED

input
499 499 9
S#...#...#...#...#...#...#...#...

correct output
1124942

user output
1124942

Test 15

Group: 3

Verdict: ACCEPTED

input
500 1 9
1
6
1
3
...

correct output
332

user output
332

Test 16

Group: 3

Verdict: ACCEPTED

input
1 500 9
996327784392827829434482995353...

correct output
135

user output
135

Test 17

Group: 2, 3

Verdict: ACCEPTED

input
500 500 9
.................................

correct output
-1

user output
-1