제출 #1134150

#제출 시각아이디문제언어결과실행 시간메모리
1134150MatbubbleCircle Passing (EGOI24_circlepassing)C++20
100 / 100
80 ms8748 KiB
#include <iostream>
#include <iomanip>
#include <string>
#include <math.h>
#include <algorithm>
#include <cstring>
#include <numeric>
#include <vector>
#include <bitset>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <unordered_map>
#include <unordered_set>

using namespace std;
#define dbg(x) cerr<<#x<<": "<<x<<"\n";

/*  
Shhhhh!
*/

void solve(){
    long long n, m, q; cin>>n>>m>>q;
    vector<long long>friends;
    for(long long i=0 ; i<m ; i++){
        long long aux; cin>>aux;
        friends.push_back(aux);
        friends.push_back((aux+n)%(2*n));
    }
    sort(friends.begin(), friends.end());
    auto dist=[&](long long x, long long y){
        if(x>y) swap(x, y);
        return min((2*n+x)-y, y-x);
    };
    while(q--){
        long long x, y; cin>>x>>y;
        long long ans=1e9;
        long long l=0, r=0;
        auto it=lower_bound(friends.begin(), friends.end(), x);
        if(it==friends.end()) l=friends[0];
        else l=*it;
        it=upper_bound(friends.begin(), friends.end(), x);
        if(it==friends.begin()) r=friends.back();
        else{
            it--;
            r=*it;
        }
        cout<<min({dist(x, y), dist(x, l)+dist(y, (l+n)%(2*n))+1, dist(x, r)+dist(y, (r+n)%(2*n))+1})<<"\n";
    }

}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    solve();
    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...