Submission #569219

#TimeUsernameProblemLanguageResultExecution timeMemory
569219pavementShortcut (IOI16_shortcut)C++17
0 / 100
1 ms296 KiB
#include "shortcut.h" #include <bits/stdc++.h> using namespace std; using ll = long long; #define mp make_pair int n, c; vector<int> l, d; vector<ll> P; ll ans = 1e18; ll cst(int x, int y) { ll ret = 0; for (int u = 0; u < n; u++) for (int v = 0; v < n; v++) ret = max(ret, min({c + max(P[u] - P[x], P[x] - P[u]) + max(P[v] - P[y], P[y] - P[v]), c + max(P[u] - P[y], P[y] - P[u]) + max(P[v] - P[x], P[x] - P[v]), max(P[u] - P[v], P[v] - P[u])}) + d[u] + d[v]); return ret; } void dnc(int l, int r, int x, int y) { if (l > r) return; int m = (l + r) >> 1; pair<ll, int> opt = mp((ll)1e18, -1); for (int i = x; i <= min(m, y); i++) opt = min(opt, mp(cst(i, m), i)); ans = min(ans, opt.first); dnc(l, m - 1, x, opt.second); dnc(m + 1, r, opt.second, y); } ll find_shortcut(int n, vector<int> l, vector<int> d, int c) { ::n = n; ::l = l; ::d = d; ::c = c; P.resize(n); for (int i = 1; i < n; i++) P[i] = P[i - 1] + l[i - 1]; dnc(0, n - 1, 0, n - 1); return ans; }
#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...