제출 #1147669

#제출 시각아이디문제언어결과실행 시간메모리
1147669FZ_LaabidiCircle Passing (EGOI24_circlepassing)C++20
100 / 100
150 ms8436 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<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]; if(x>=k[2*m-1]|| x<=k[0]) { clo = k[2*m-1]; cli = k[0]; } int final = mini(clo, x, y); int fin = mini(cli, x, y); 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...