Submission #1229285

#TimeUsernameProblemLanguageResultExecution timeMemory
1229285ripolasCircle Passing (EGOI24_circlepassing)C++20
100 / 100
169 ms4644 KiB
#include <bits/stdc++.h> using namespace std; int n; int circleDistance (int x, int y){ if(x>y)swap(x,y); // 5 7 return min(y-x,x+n-y); } int main(){ int m,q; cin>>n>>m>>q; n*=2; vector<int> k; for(int i = 0;i<m;i++){ int a; cin>>a; k.push_back(a); k.push_back((a+n/2)%n); } sort(k.begin(),k.end()); for(int i = 0;i<q;i++){ int x,y; cin>>x>>y; int rez = circleDistance(x,y); auto it = lower_bound(k.begin(),k.end(),x); int a,b; if(it!=k.end()){ auto it2 = k.end()-1; if(it!=k.begin()){ it2 = it-1; } a = *it; b = *it2; }else{ a = k[k.size()-1]; b = k[0]; } int pathA = circleDistance(x,a)+1+circleDistance(y,(a+n/2)%n); int pathB = circleDistance(x,b)+1+circleDistance(y,(b+n/2)%n); cout<<min({rez,pathA,pathB})<<endl; } } /* 4 2 1 1 2 5 4 */
#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...