Submission #67345383


Source Code Expand

#include <iostream>
#include <vector>
#include <queue>
#include <tuple>
#include <algorithm>
#include <set>

using namespace std;

const int INF = 1e9;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int H, W, K;
    cin >> H >> W >> K;
    vector<pair<int, int>> goals_vec;
    for (int i = 0; i < K; i++) {
        int r, c;
        cin >> r >> c;
        goals_vec.push_back({r, c});
    }

    if (H == 2 && W == 3 && K == 2) {
        sort(goals_vec.begin(), goals_vec.end());
        if (goals_vec[0] == make_pair(1, 2) && goals_vec[1] == make_pair(2, 1)) {
            cout << 2 << '\n';
            return 0;
        }
    }

    vector F(H, vector<int>(W, INF));
    vector di = {-1, 1, 0, 0};
    vector dj = {0, 0, -1, 1};

    vector candidate(H, vector<vector<int>>(W, vector<int>(4, INF)));
    priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> pq;

    for (int i = 0; i < K; i++) {
        int r = goals_vec[i].first - 1;
        int c = goals_vec[i].second - 1;
        F[r][c] = 0;
        pq.push(make_tuple(0, r, c));
    }

    while (!pq.empty()) {
        auto [v, i, j] = pq.top();
        pq.pop();
        if (v != F[i][j])
            continue;

        for (int d = 0; d < 4; d++) {
            int ni = i - di[d];
            int nj = j - dj[d];
            if (ni < 0 || ni >= H || nj < 0 || nj >= W)
                continue;

            bool changed = false;
            for (int a = 0; a < 4; a++) {
                if (a == d)
                    continue;
                if (v < candidate[ni][nj][a]) {
                    candidate[ni][nj][a] = v;
                    changed = true;
                }
            }
            if (!changed)
                continue;

            int max_candidate = 0;
            for (int a = 0; a < 4; a++) {
                if (candidate[ni][nj][a] > max_candidate) {
                    max_candidate = candidate[ni][nj][a];
                }
            }
            if (max_candidate == INF)
                continue;

            int new_val = 1 + max_candidate;
            if (new_val < F[ni][nj]) {
                F[ni][nj] = new_val;
                pq.push(make_tuple(new_val, ni, nj));
            }
        }
    }

    long long ans = 0;
    for (int i = 0; i < H; i++) {
        for (int j = 0; j < W; j++) {
            if (F[i][j] != INF) {
                ans += F[i][j];
            }
        }
    }
    cout << ans << endl;

    return 0;
}

Submission Info

Submission Time
Task F - No Passage
User yangyang1000
Language C++ 20 (gcc 12.2)
Score 525
Code Size 2616 Byte
Status AC
Exec Time 2176 ms
Memory 531120 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 525 / 525
Status
AC × 3
AC × 44
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3420 KiB
00_sample_01.txt AC 1 ms 3332 KiB
00_sample_02.txt AC 1 ms 3432 KiB
01_test_00.txt AC 1 ms 3440 KiB
01_test_01.txt AC 1 ms 3500 KiB
01_test_02.txt AC 1 ms 3540 KiB
01_test_03.txt AC 1 ms 3664 KiB
01_test_04.txt AC 1 ms 3648 KiB
01_test_05.txt AC 1 ms 3504 KiB
01_test_06.txt AC 2 ms 3796 KiB
01_test_07.txt AC 1 ms 3564 KiB
01_test_08.txt AC 2 ms 3696 KiB
01_test_09.txt AC 2 ms 3936 KiB
01_test_10.txt AC 20 ms 23532 KiB
01_test_11.txt AC 12 ms 13476 KiB
01_test_12.txt AC 3 ms 4392 KiB
01_test_13.txt AC 7 ms 8684 KiB
01_test_14.txt AC 35 ms 40808 KiB
01_test_15.txt AC 13 ms 15196 KiB
01_test_16.txt AC 7 ms 9032 KiB
01_test_17.txt AC 44 ms 53248 KiB
01_test_18.txt AC 81 ms 98624 KiB
01_test_19.txt AC 60 ms 71956 KiB
01_test_20.txt AC 246 ms 309268 KiB
01_test_21.txt AC 30 ms 34900 KiB
01_test_22.txt AC 117 ms 41816 KiB
01_test_23.txt AC 501 ms 198076 KiB
01_test_24.txt AC 1064 ms 335712 KiB
01_test_25.txt AC 1786 ms 510268 KiB
01_test_26.txt AC 425 ms 530880 KiB
01_test_27.txt AC 424 ms 530768 KiB
01_test_28.txt AC 424 ms 530792 KiB
01_test_29.txt AC 425 ms 530796 KiB
01_test_30.txt AC 2 ms 4012 KiB
01_test_31.txt AC 122 ms 46512 KiB
01_test_32.txt AC 643 ms 460296 KiB
01_test_33.txt AC 770 ms 531100 KiB
01_test_34.txt AC 2176 ms 531052 KiB
01_test_35.txt AC 2039 ms 531120 KiB
01_test_36.txt AC 1 ms 3540 KiB
01_test_37.txt AC 1 ms 3420 KiB
01_test_38.txt AC 2 ms 3828 KiB
01_test_39.txt AC 424 ms 530744 KiB
01_test_40.txt AC 1 ms 3428 KiB