Submission #1166166

#TimeUsernameProblemLanguageResultExecution timeMemory
116616612345678Circle Passing (EGOI24_circlepassing)C++20
100 / 100
280 ms47644 KiB
#include <bits/stdc++.h>

using namespace std;

int n, m, q, x, y;
set<int> s;

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

int move(int x)
{
    return (x+n)%(2*n);
}

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n>>m>>q;
    for (int i=1; i<=m; i++) cin>>x, s.insert(x), s.insert(x+n);
    while (q--)
    {
        cin>>x>>y;
        int res=dist(x, y);
        auto itr=s.lower_bound(x);
        if (itr!=s.end()) res=min(res, dist(x, *itr)+1+dist(move(*itr), y));
        else res=min(res, dist(x, *s.begin())+1+dist(move(*s.begin()), y));
        if (itr!=s.begin()) res=min(res, dist(x, *prev(itr))+1+dist(move(*prev(itr)), y));
        else res=min(res, dist(x, *prev(s.end()))+1+dist(move(*prev(s.end())), y));
        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...