Submission #1147668

#TimeUsernameProblemLanguageResultExecution timeMemory
1147668FZ_LaabidiCircle Passing (EGOI24_circlepassing)C++20
14 / 100
108 ms5984 KiB
#include <bits/stdc++.h> #define int long long using namespace std; int n, m, q; vector<int> k(m); int binary(int x) { int l =0, r = 2*m-1; while (abs(l-r)>1) { int m = l+(r-l)/2; if (k[m]>x) { r = m; } else l = m; } return r; } int mini(int c, int x, int y) { int first = min(abs(x-c), 2*n-abs(x-c)); int vro = (c+n)%(2*n); int second = min(abs(y-vro), 2*n-abs(y-vro)); return first+second+1; } signed main() { cin >> n >> m >> q; k.resize(m); for (int i=0; i<m; i++) { cin >> k[i]; k.push_back(k[i]+n); } sort(k.begin(), k.end()); //for (int i=0; i<k.size(); i++)cout << k[i]<< " "; // cout << endl; for (int i=0; i<q; i++) { int x, y; cin >> x >> y; int without = min(abs(x-y), 2*n-abs(x-y)); int ind = binary(x); int clo = k[ind], cli; if (ind==0) cli = k[2*m-1]; else cli = k[ind-1]; int final = mini(clo, x, y); int fin = mini(cli, x, y); // cout << cli << " "<< clo << " "<< ind << " "<< final << " "<< fin << " "<< without << endl; cout << min(min(final, fin), without) << 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...