Submission #1232381

#TimeUsernameProblemLanguageResultExecution timeMemory
1232381yixuan19Circle Passing (EGOI24_circlepassing)C++20
14 / 100
135 ms4536 KiB
//#include <bits/stdc++.h>
#include <iostream>
#include <vector>

using namespace std;
int N, M, Q, f, start, target, min_time, r, l;

int find_friend(int f){
    if (f >= N) return f-N;
    return f + N;
}
int dist(int a, int b){
    if (b > a){
        swap(a,b);
    }
    return min(a-b,2*N - a + b);
}
int main(){
    cin >> N >> M >> Q;
    vector<int> friends;

    for (int i = 0; i < M; ++i){
        cin >> f;
        friends.push_back(f);
        friends.push_back(f+N);
    }
    sort(friends.begin(), friends.end());

    for (int i = 0; i < Q; ++i){
        cin >> start >> target;
        min_time = dist(start,target);
        r = lower_bound(friends.begin(), friends.end(),start) - friends.begin();
        if (r > 0){
            l = r-1;
        }else{
            l = 0;
        }
        min_time = min(min_time, dist(start,friends[r]) + dist(find_friend(friends[r]),target) + 1);
        min_time = min(min_time, dist(start,friends[l]) + dist(find_friend(friends[l]),target) + 1);
        cout<<min_time<<'\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...