Submission #1355492

#TimeUsernameProblemLanguageResultExecution timeMemory
1355492mxhrvsCircle Passing (EGOI24_circlepassing)C++20
31 / 100
62 ms8784 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

ll n, m, q;

ll dist(ll x, ll y) {
    ll d = abs(x - y);
    return min(d, 2 * n - d);
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    cin >> n >> m >> q;

    vector<ll> s;
    for (int i = 0; i < m; i++) {
        ll k;
        cin >> k;
        s.push_back(k);
        s.push_back(k + n);
    }
    sort(s.begin(), s.end());

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

        ll ans = dist(x, y);

        vector<ll> v;
        
        auto it1 = lower_bound(s.begin(), s.end(), x);
        if (it1 != s.end()) v.push_back(*it1);
        if (it1 != s.begin()) v.push_back(*prev(it1));
        else v.push_back(s.back());

        auto it2 = lower_bound(s.begin(), s.end(), y);
        if (it2 != s.end()) v.push_back(*it2);
        if (it2 != s.begin()) v.push_back(*prev(it2));
        else v.push_back(s.back());

        for (ll i : v) {
            ll j = (i < n) ? (i + n) : (i - n);
            
            ll d = dist(x, i) + 1 + dist(j, y);
            ans = min(ans, d);
        }

        cout << ans << "\n";
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...