제출 #1224659

#제출 시각아이디문제언어결과실행 시간메모리
1224659asli_bgCircle Passing (EGOI24_circlepassing)C++20
100 / 100
289 ms51500 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define fi first #define se second #define pb push_back #define sp <<' '<< #define FOR(i,a) for(int i=0;i<(a);i++) #define FORE(i,a,b) for(int i=(a);i<(b);i++) #define cont(x) for(auto el:x) cout<<el<<endl; #define contp(x) for(auto el:x) cout<<el.fi<<'-'<<el.se<<' ';cout<<endl; #define DEBUG(x) cout<<#x sp x<<endl; #define mid (l+r)/2 typedef vector<int> vi; typedef pair<int,int> pii; typedef vector<pii> vii; typedef vector<bool> vb; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0);cout.tie(0); int n,m,q; cin>>n>>m>>q; vi aa(m); set<int> s1; FOR(i,m){ cin>>aa[i]; s1.insert(aa[i]); s1.insert(aa[i]+n); } while(q--){ int x,y; cin>>x>>y; if(x>y) swap(x,y); //x küçük olan, y büyük olan int ans=min(y-x,2*n-(y-x)); int bir,iki; bool ff=false; if(s1.count(x)){ int deg=1; if(x<n) {bir=x;iki=x+n;} else {bir=x;iki=x-n;} deg+=min(abs(bir-x),2*n-abs(bir-x)); deg+=min(abs(iki-y),2*n-abs(iki-y)); ans=min(ans,deg); ff=true; s1.erase(bir); s1.erase(iki); } if(!s1.empty()){ auto it=s1.upper_bound(x); if(it==s1.end()) it=s1.begin(); if(it!=s1.end()){ int deg=1; int temp; if(*it<n) temp=*it+n; else temp=*it-n; deg+=min(abs(*it-x),2*n-abs(*it-x)); deg+=min(abs(temp-y),2*n-abs(temp-y)); ans=min(ans,deg); } if(it==s1.begin())it=s1.end(); if(it!=s1.begin()){ it--; int deg=1; int temp; if(*it<n) temp=*it+n; else temp=*it-n; deg+=min(abs(*it-x),2*n-abs(*it-x)); deg+=min(abs(temp-y),2*n-abs(temp-y)); ans=min(ans,deg); } } if(ff){ s1.insert(bir); s1.insert(iki); } cout<<ans<<endl; } }
#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...