제출 #1130063

#제출 시각아이디문제언어결과실행 시간메모리
1130063irmuunCircle Passing (EGOI24_circlepassing)C++20
100 / 100
55 ms4424 KiB
#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    int n,m,q;
    cin>>n>>m>>q;
    int k[2*m];
    for(int i=0;i<m;i++){
        cin>>k[i];
    }
    for(int i=m;i<2*m;i++){
        k[i]=k[i-m]+n;
    }
    auto d=[&](int a,int b)->int{
        int r=max(a,b)-min(a,b);
        r=min(r,2*n-r);
        return r;
    };
    while(q--){
        int x,y;
        cin>>x>>y;
        int ans=max(y,x)-min(x,y);
        ans=min(ans,2*n-ans);
        int p=lower_bound(k,k+2*m,x)-k;
        p%=(2*m);
        int d1=d(x,k[p])+1+d((n+k[p])%(2*n),y);
        int d2=d(x,(n+k[p])%(2*n))+1+d(k[p],y);
        ans=min({ans,d1,d2});
        p=(p-1+2*m)%(2*m);
        d1=d(x,k[p])+1+d((n+k[p])%(2*n),y);
        d2=d(x,(n+k[p])%(2*n))+1+d(k[p],y);
        ans=min({ans,d1,d2});
        p=lower_bound(k,k+2*m,y)-k;
        p%=(2*m);
        d1=d(x,k[p])+1+d((n+k[p])%(2*n),y);
        d2=d(x,(n+k[p])%(2*n))+1+d(k[p],y);
        ans=min({ans,d1,d2});
        p=(p-1+2*m)%(2*m);
        d1=d(x,k[p])+1+d((n+k[p])%(2*n),y);
        d2=d(x,(n+k[p])%(2*n))+1+d(k[p],y);
        ans=min({ans,d1,d2});
        cout<<ans<<"\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...