이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |