이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
// #include "grader.cpp"
using namespace std;
typedef long long ll;
const int N = 3e3 + 10;
ll dist[N], initially[N][N], tmp[N][2], pmx[N], smx[N];
ll distance(ll u, ll v){
if (u > v)
swap(u, v);
return dist[v] - dist[u];
}
ll find_shortcut(int n, vector<int> l, vector<int> d, int c){
dist[0] = 0;
for (ll i=1; i<n; i++)
dist[i] = dist[i - 1] + l[i - 1];
for (ll u = 0; u < n; u++){
for (ll v = 0; v < n; v++){
if (u == v) continue;
initially[u][v] = distance(u, v) + d[u] + d[v];
pmx[max(u, v)] = max(pmx[max(u, v)], initially[u][v]);
smx[min(u, v)] = max(smx[min(u, v)], initially[u][v]);
}
}
ll diam = 1e18;
for (ll u = 0; u < n; u++){
ll midmx = 0;
for (ll v = u + 1; v < n; v++){
// express line (u, v)
// if (u != 7 or v != 8) continue;
ll mx[4] = {0};
ll ans = 0;
for (ll x = 0; x < n; x++){
if (x <= u){
tmp[x][0] = (ll)d[x] + distance(x, u);
mx[0] = max(mx[0], tmp[x][0]);
}
else if (u < x and x < v){
tmp[x][0] = (ll)d[x] + min(distance(x, u), distance(x, v) + c);
tmp[x][1] = (ll)d[x] + min(distance(x, v), distance(x, u) + c);
mx[1] = max(mx[1], tmp[x][0]);
mx[2] = max(mx[2], tmp[x][1]);
}
else if (v <= x){
tmp[x][1] = (ll)d[x] + distance(x, v);
mx[3] = max(mx[3], tmp[x][1]);
}
}
for (ll x = u + 1; x < v - 1; x++){
ll mind = distance(x, v - 1);
mind = min(mind, distance(x, u) + c + distance(v - 1, v));
midmx = max(midmx, mind + d[v - 1] + (ll)d[x]);
}
ans = max(ans, pmx[u]);
ans = max(ans, midmx);
ans = max(ans, smx[v]);
ans = max(ans, mx[0] + mx[3] + min((ll)c, distance(u, v)));
ans = max(ans, mx[0] + mx[1]);
ans = max(ans, mx[2] + mx[3]);
// ans = max(ans, mx[3] + d[v]);
// ans = max(ans, mx[2] + d[v]);
// ans = max(ans, min(distance(u, v), c) + mx[0] + d[v]);
// cout << u << " " << v << " " << mx[0] << " " << mx[1] << " " << mx[2] << " " << mx[3] << endl;
diam = min(diam, ans);
// if (ans == 100) cout << u << " ---- " << v << endl;
}
}
return diam;
}
# | 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... |