Submission #1244340

#TimeUsernameProblemLanguageResultExecution timeMemory
1244340rhm_ganCircle Passing (EGOI24_circlepassing)C++20
100 / 100
38 ms2400 KiB
#include <bits/stdc++.h>
using namespace std;

#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...) 42
#endif

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

    int n, m, q;
    cin >> n >> m >> q;

    vector<int> k(m);
    for (int i = 0; i < m; i++) {
        cin >> k[i];
    }

    auto dist = [&](int x, int y) {
        if (x > y) swap(x, y);
        return min(y - x, 2 * n - y + x);
    };

    auto calc = [&](int x, int y, int i) {
        int d1 = dist(x, k[i]) + dist(y, k[i] + n) + 1;
        int d2 = dist(x, k[i] + n) + dist(y, k[i]) + 1;
        return min(d1, d2);
    };

    while (q--) {
        int x, y;
        cin >> x >> y;

        if (x > y) swap(x, y);
        int res = dist(x, y);

        int id1 = lower_bound(k.begin(), k.end(), x) - k.begin();
        int id2 = lower_bound(k.begin(), k.end(), x) - k.begin() - 1;
        if (id1 == m) id1 = 0;
        if (id2 == -1) id2 = m - 1;

        res = min(res, calc(x, y, id1));
        res = min(res, calc(x, y, id2));

        cout << res << '\n';
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...