Submission #1353065

#TimeUsernameProblemLanguageResultExecution timeMemory
1353065Francisco_MartinCircle Passing (EGOI24_circlepassing)C++20
100 / 100
146 ms8744 KiB
//EGOI 2024 Circle Passing
//https://qoj.ac/contest/1765/problem/9186

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vll = vector<ll>;

int main(){
    ll n, m, q, a, b; vll A;
    cin >> n >> m >> q;
    for(int i=0; i<m; i++) cin >> a, A.push_back(a), A.push_back(a+n);
    sort(A.begin(),A.end()); n*=2; m*=2;
    auto dis=[&](ll x,ll y){
        if(x>y) swap(x,y);
        return min(y-x,n-y+x);
    };
    for(int i=0; i<q; i++){
        cin >> a >> b; ll res=dis(a,b);
        ll l=((upper_bound(A.begin(),A.end(),a)-A.begin())-1+m)%m, r=(l+1)%m;
        res=min({res,dis(a,A[l])+dis((A[l]+n/2)%n,b)+1,dis(a,A[r])+dis((A[r]+n/2)%n,b)+1});
        cout << res << "\n";
    }
}
#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...