제출 #1221172

#제출 시각아이디문제언어결과실행 시간메모리
1221172RifalCircle Passing (EGOI24_circlepassing)C++20
14 / 100
41 ms2004 KiB
#include <bits/stdc++.h> #include <fstream> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #define endl '\n' #define pb push_back #define INF 200000000 #define fi first #define se second //#define cin fin //#define cout fout using namespace std; //double const EPS = 1e-14; typedef long long ll; //const ll P = 10007; //const ll mod = 1e9 + 7; //using namespace __gnu_pbds; //typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; // find_by_order, order_of_key const int Max = 5e5 + 5; ll n, m, q; int fr[Max]; ll fin(ll x, ll y) { ll sum = min(abs(x-y),(n*2ll)-abs(x-y)); return sum; } ll sol(int id, ll x, ll y) { ll a = fr[id], b = fr[id] + n; ll dis1 = fin(x,a)+fin(y,b)+1; ll dis2 = fin(x,b)+fin(y,a)+1; ll best = n + 10; best = min(best,min(dis1,dis2)); return best; } int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); cin >> n >> m >> q; for(int i = 0; i < m; i++) cin >> fr[i]; while(q--) { ll x, y; cin >> x >> y; ll ans = fin(x,y); int id2 = m-1, id3 = 0, id1 = lower_bound(fr,fr+m,x)-fr; if(id1 < m-1) id3 = id1+1; if(id1 != 0) id2 = id1-1; ans = min(ans,sol(id1,x,y)); ans = min(ans,sol(id2,x,y)); ans = min(ans,sol(id3,x,y)); id2 = m-1, id3 = 0, id1 = lower_bound(fr,fr+m,y)-fr; if(id1 < m-1) id3 = id1+1; if(id1 != 0) id2 = id1-1; ans = min(ans,sol(id1,x,y)); ans = min(ans,sol(id2,x,y)); ans = min(ans,sol(id3,x,y)); 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...