제출 #1229072

#제출 시각아이디문제언어결과실행 시간메모리
1229072unnickCircle Passing (EGOI24_circlepassing)C++20
100 / 100
147 ms2372 KiB
#include <iostream> #include <vector> #include <algorithm> typedef long long int ll; using namespace std; int mod(int x, int y) { return ((x%y)+y)%y; } int dist(int n, int x, int y) { return min(mod(x-y,n*2),mod(y-x,n*2)); } // int dist2(int n, int x, int y) { // return min(mod(x-y,n),mod(y-x,n)); // } int dkl(vector<int> &k, int n, int i) { int a = i >= n ? n : 0; i -= a; int j = distance(k.begin(), upper_bound(k.begin(), k.end(), i)); if (j == 0) return k.back() - n + a; return k[j-1] + a; } int dkr(vector<int> &k, int n, int i) { int a = i >= n ? n : 0; i -= a; int j = distance(k.begin(), lower_bound(k.begin(), k.end(), i)); if (j == k.size()) return k.front() + n + a; return k[j] + a; } // #define dbg(v) cout << #v << " = " << v << "\n" int main() { int n, m, q; cin >> n >> m >> q; vector<int> k(m); for (int i = 0; i < m; i++) { cin >> k[i]; } for (int i = 0; i < q; i++) { int x, y; cin >> x >> y; int r = dist(n, x, y); // dbg(dkl(k,n,x)); { int tmp = dkl(k, n, x); r = min(r, dist(n, x, tmp) + dist(n, tmp+n, y) + 1); } { int tmp = dkr(k, n, x); r = min(r, dist(n, x, tmp) + dist(n, tmp+n, y) + 1); } { int tmp = dkl(k, n, y); r = min(r, dist(n, x, tmp+n) + dist(n, tmp, y) + 1); } { int tmp = dkr(k, n, y); r = min(r, dist(n, x, tmp+n) + dist(n, tmp, y) + 1); } cout << r << "\n"; } // vector<int> dfl; // vector<int> dfr; // for (int j = 0; j < 2; j++) { // int dl = 20000; // int dr = 0; // } 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...