Submission #1098346

#TimeUsernameProblemLanguageResultExecution timeMemory
1098346ALTAKEXECircle Passing (EGOI24_circlepassing)C++17
100 / 100
367 ms52564 KiB
#include <bits/stdc++.h> #define ll long long #define ff first #define ss second #define inf INT_MAX #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define FAR(i, a, b) for (int i = (a); i >= (b); i--) #define all(x) (x.begin(), x.end()) const int MOD = 1e9 + 7; using namespace std; ll n, m, q; ll dist(ll a, ll b) { return min(abs(a - b), 2 * n - abs(a - b)); } int main() { set<int> best; cin >> n >> m >> q; for (ll i = 0; i < m; i++) { ll x; cin >> x; best.insert(x); best.insert(x + n); } while (q--) { ll a, b; cin >> a >> b; if (a > b) swap(a, b); int l = -1; int r = -1; auto it1 = best.upper_bound(a); if (it1 != best.begin()) { it1--; l = (*it1) % (n * 2); } else { it1 = best.end(); it1--; l = (*it1) % (n * 2); } it1 = best.lower_bound(a); if (it1 != best.end()) { r = (*it1) % (n * 2); } else { it1 = best.begin(); r = (*it1) % (n * 2); } ll m1 = dist(a, b); ll m2 = l == -1 ? 1e9 : dist(a, l) + dist((l + n) % (n * 2), b) + 1; ll m3 = r == -1 ? 1e9 : dist(a, r) + dist((r + n) % (n * 2), b) + 1; cout << min(min(m1, m2), m3) << "\n"; } 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...