제출 #1335599

#제출 시각아이디문제언어결과실행 시간메모리
1335599goulthenCircle Passing (EGOI24_circlepassing)C++20
100 / 100
58 ms4536 KiB
#include <bits/stdc++.h>
using namespace std;

#define rep(i,a,b) for (int i = a; i <= b; i++)
#define per(i,a,b) for (int i = a; i >= b; i--)
#define pb push_back
#define all(v) (v).begin(), (v).end()

const int MAXN = 5e5+10;
int n;

int cdist(int x, int y ) {
    return min(abs(y-x),abs(2*n-abs(x-y)));
}

int main() {
    ios_base::sync_with_stdio(0);cin.tie(nullptr);
    int m,q; cin >> n >> m >> q;
    vector<int> sp(m);
    rep(i,0,m-1) cin >> sp[i];
    rep(i,0,m-1) sp.pb(sp[i]+n);

    while (q--) {
        int x,y; cin >> x >> y;
        int ans = cdist(x,y);

        auto x1 = upper_bound(all(sp), x);
        if(x1==sp.end()) x1 = sp.begin();
        
        ans=min(ans, cdist(*x1,x)+1+cdist((*x1+n)%(2*n), y));
        if(x1==sp.begin()) x1 = sp.end();
        x1--;
        ans=min(ans, cdist(*x1,x)+1+cdist((*x1+n)%(2*n), y));
        cout << ans << endl;
    }
    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...