Submission #787572

#TimeUsernameProblemLanguageResultExecution timeMemory
787572fatemetmhrShortcut (IOI16_shortcut)C++17
31 / 100
2072 ms3220 KiB
// ~ Be Name Khoda ~ // #include "shortcut.h" #include <bits/stdc++.h> //#pragma GCC optimize ("O3") //#pragma GCC target("avx2") //#pragma GCC optimize("unroll-loops,Ofast") using namespace std; typedef long long ll; #define pb push_back #define mp make_pair #define all(x) x.begin(), x.end() #define fi first #define se second const int maxn = 1e6 + 10; const int maxn5 = 3e3 + 10; const int maxnt = 1.2e6 + 10; const int maxn3 = 1e3 + 10; const ll mod = 1e9 + 7; const int lg = 20; const ll inf = 1e18; int n; ll c; vector <ll> d; ll ps[maxn5], ps2[maxn5]; vector <ll> av[maxn5][2]; ll dis(int a, int b){ if(a > b) swap(a, b); return ps[b] - ps[a]; } bool check(ll lim){ for(int i = 0; i < n; i++){ int l = i + 1, r = n; bool re = true; for(int j = 0; j < n && re; j++) for(int k = j + 1; k < n && re; k++) if(dis(j, k) + d[j] + d[k] > lim){ ll dis1 = dis(i, j); ll need = lim - c - d[j] - d[k] - dis1; if(need < 0) re = false; int ptl = k - (upper_bound(all(av[k][0]), need) - av[k][0].begin() - 1); int ptr = k + (upper_bound(all(av[k][1]), need) - av[k][1].begin() - 1); l = max(l, ptl); r = min(r, ptr); //cout << lim << ' ' << i << ' ' << j << ' ' << k << ' ' << l << ' ' << r << endl; if(l > r) re = false; } if(re) return true; } return false; } long long find_shortcut(int N, std::vector<int> l, std::vector<int> D, int C) { n = N; c = C; for(auto u : D) d.pb(u); ps[0] = 0; for(int i = 1; i < n; i++) ps[i] = ps[i - 1] + l[i - 1]; for(int i = 0; i < n; i++){ for(int j = i; j >= 0; j--) av[i][0].pb(dis(i, j)); for(int j = i; j < n; j++) av[i][1].pb(dis(i, j)); } ll lo = -1, hi = mod * (n + 3); while(hi - lo > 1){ ll mid = (lo + hi) >> 1; if(check(mid)) hi = mid; else lo = mid; } return hi; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...