Submission #1151497

#TimeUsernameProblemLanguageResultExecution timeMemory
1151497KaleemRazaSyedCircle Passing (EGOI24_circlepassing)C++20
100 / 100
136 ms4316 KiB
#include<bits/stdc++.h> using namespace std; int n, m, q; int dist(int x, int y) { if(x < y) swap(x, y); return min(2 * n - (x - y), x - y); } int dist2(int x, int y, int k1, int k2) { return min(dist(x, k1) + dist(k2, y), dist(x, k2) + dist(k1, y)) + 1; } int main() { cin >> n >> m >> q; int k[2 * m]; for(int i = 0; i < m; i ++) cin >> k[i]; for(int i = 0; i < m; i ++) k[i + m] = k[i] + n; while(q--) { int x, y; cin >> x >> y; int ans = dist(x, y); if(x > y) swap(x, y); // x <= y ans = min(ans, dist2(x, y, k[m - 1], k[m - 1] + n)); ans = min(ans, dist2(x, y, k[0], k[0] + n)); auto it = lower_bound(k, k + 2 * m, x); if(it != k + 2 * m) { int idx = it - k; ans = min(ans, dist2(x, y, k[idx], (k[idx] + n) % (2 * n))); } if(it != k) { it--; int idx = it - k; ans = min(ans, dist2(x, y, k[idx], (k[idx] + n) % (2*n))); } cout << ans << endl; } return 0; }
#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...