Submission #1192949

#TimeUsernameProblemLanguageResultExecution timeMemory
1192949nguyenkhangninh99Circle Passing (EGOI24_circlepassing)C++20
100 / 100
38 ms8272 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n, m, q; vector<int> bridge; int dist(int x, int y){ if(x < n) return min(abs(y - x), x + 2 * n - y); else return min(abs(y - x), 2 * n - x + y); } pair<int, int> get(int x){ if(x < bridge[0] || x > bridge[2 * m - 1]) return {0, 2 * m - 1}; else if(x == bridge[0]) return {0, 0}; else if(x == bridge[2 * m - 1]) return {2 * m - 1, 2 * m - 1}; int l = 0, r = 2 * m - 1; while(l < r){ int mid = (r + l) / 2; if(bridge[mid] > x) r = mid; else if(bridge[mid] < x) l = mid; else if(bridge[mid] == x) return {mid, mid}; if(r - l < 2) return {l, r}; } return {min(r, l), max(r, l)}; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m >> q; bridge = vector<int>(2 * m); for(int i = 0; i < m; i++){ cin >> bridge[i]; bridge[i + m] = bridge[i] + n; } while(q--){ int x, y; cin >> x >> y; pair<int, int> b = get(x); int f = dist(x, bridge[b.first]) + dist(y, bridge[(b.first + m) % (2 * m)]) + 1; int s = dist(x, bridge[b.second]) + dist(y, bridge[(b.second + m) % (2 * m)]) + 1; cout << min(dist(x, y), min(f, s)) << "\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...