Submission #1168321

#TimeUsernameProblemLanguageResultExecution timeMemory
1168321pyrrosCircle Passing (EGOI24_circlepassing)C++20
0 / 100
2095 ms469480 KiB
#include <bits/stdc++.h> using namespace std; #define int long long signed main() { int n, me, q; cin>>n>>me>>q; vector<int> bff; int pivot = 0; map<int, bool> m; for(int i = 0; i < me; i++) { int a; cin>>a; bff.push_back(a); m[a] = 1; m[a+n] = 1; } //st1 //int diff = pivot; int new_target = 0; while(q--) { int x, y; cin>>x>>y; pivot = x; if(y > x){ new_target = y-pivot; }else if(y < x) { new_target = 2*n-(x-y); } //cout<<"new_target: "<<new_target<<endl; int answer = 1e9; //asume x = 0 and pivot; //approach from centre int perimeter = n/2+1; //new target is the y after shifted //go left first //cout<<"p: "<<perimeter<<endl; //cout<<"from left to right: "<<endl; for(int j = 0; j <= perimeter; j++) { //cout<<"nope"<<endl; if(m[j+pivot] == 1) //exist a shorter path { answer = min(answer, j+(abs((j+n)-new_target))+1); //cout<<"real ans: "<<j+(abs((j+n)-new_target))+1<<endl; //cout<<"j: "<<j<<" "<<"answer: "<<answer<<endl; } } //cout<<endl; //cout<<"from right to left: "<<endl; //to the right where start 2n-1; for(int j = 1; j <= perimeter; j++) { int new_idx = 2*n-new_target; int ref = new_idx; //cout<<"newidx: "<<new_idx<<" "<<"new_target: "<<new_target<<endl; ref = (x+new_target)%2*n; //cout<<"ref: "<<ref<<endl; if(m[ref] == 1) //shows that got exist from the left hemisphere; { answer = min(answer, j+abs((n-j) - new_target)+1); //cout<<"real ans: "<<j+abs((n-j) - new_target)+1<<endl; } //cout<<"j: "<<j<<" "<<"answer: "<<answer<<endl; } //last segment to decide and compare if it is better to not use any bridge if(new_target < n) { answer = min(answer, new_target); } else if(new_target > n) { answer = min(answer, 2*n-new_target); }else if(new_target == n) { answer = min(answer, n); } /* int center = abs(n-new_target); int start; if(new_target > n) { start = 2*n-new_target; } else if(new_target < n) { start = new_target; } else if(new_target == n) { cout<<1<<'\n'; continue; } answer = min(start, center+1); cout<<answer<<'\n'; */ cout<<answer<<'\n'; //cout<<endl; //cout<<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...