// ItnoE
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 505;
int n, wlen, D[N];
ll L[N], F1[N][N], F2[N][N];
ll suff[N], pref[N];
inline ll Dist(int i, int j)
{
return (abs(L[i] - L[j]));
}
inline ll Solve(int a, int b)
{
ll tmpMx = 0;
for (int i = 0; i < n; i ++)
for (int j = i + 1; j < n; j ++)
tmpMx = max(tmpMx, min({Dist(i, j), Dist(i, a) + Dist(b, j) + wlen, Dist(i, b) + Dist(a, j) + wlen}) + D[i] + D[j]);
if (L[b] - L[a] <= wlen)
{
ll Mx = 0;
for (int i = 0; i < n; i ++)
for (int j = i + 1; j < n; j ++)
Mx = max(Mx, L[j] - L[i] + D[i] + D[j]);
return (Mx);
}
if (a > b) swap(a, b);
ll Mx = max(pref[a], suff[b]);
Mx = max(Mx, F2[a][0] + F1[b][n - 1] + wlen);
{
int val = (L[a] + L[b] + wlen) >> 1;
int lb = upper_bound(L + a, L + b + 1, val) - L;
if (lb > a)
Mx = max(Mx, F2[a][0] + F1[a + 1][lb - 1] + L[a + 1] - L[a]);
if (lb < b)
Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
}
/*{
int val = (L[a] + L[b] - wlen) >> 1;
int lb = upper_bound(L + 1, L + n, val) - L;
Mx = max(Mx, F1[b][n - 1] + F2[b - 1][lb] + L[b] - L[b - 1]);
Mx = max(Mx, F1[b][n - 1] + F1[a][lb - 1] + wlen);
}*/
/*int r = a;
for (int k = a; k < b; k ++)
{
while (r <= b && 2 * L[r] <= L[b] - L[a] + 2 * L[k] + wlen)
r ++;
if (k + 1 <= r - 1)
Mx = max(Mx, D[k] + F1[k + 1][r - 1] + L[k + 1] - L[k]);
if (r <= b)
Mx = max(Mx, D[k] + L[k] - L[a] + wlen + F2[b][r]);
}*/
assert(Mx <= tmpMx);
return (tmpMx);
}
int64_t find_shortcut(int _n, vector < int > _L, vector < int > _D, int _c)
{
n = _n; wlen = _c;
for (int i = 0; i < n - 1; i ++)
L[i + 1] = L[i] + _L[i];
for (int i = 0; i < n; i ++)
D[i] = _D[i];
memset(F1, -63, sizeof(F1));
memset(F2, -63, sizeof(F2));
for (int i = 0; i < n; i ++)
{
F1[i][i] = D[i];
for (int j = i + 1; j < n; j ++)
F1[i][j] = max(F1[i][j - 1], D[j] + L[j] - L[i]);
}
for (int i = n - 1; i >= 0; i --)
{
F2[i][i] = D[i];
for (int j = i - 1; j >= 0; j --)
F2[i][j] = max(F2[i][j + 1], D[j] + L[i] - L[j]);
}
pref[0] = D[0];
ll CMx = D[0];
for (int i = 1; i < n; i ++)
{
CMx += L[i] - L[i - 1];
pref[i] = max(pref[i - 1], CMx + D[i]);
CMx = max(CMx, (ll)D[i]);
}
suff[n - 1] = D[n - 1];
CMx = D[n - 1];
for (int i = n - 2; i >= 0; i --)
{
CMx += L[i + 1] - L[i];
suff[i] = max(suff[i + 1], CMx + D[i]);
CMx = max(CMx, (ll)D[i]);
}
ll Mn = Solve(0, 0);
for (int i = 0; i < n; i ++)
for (int j = i + 1; j < n; j ++)
Mn = min(Mn, Solve(i, j));
return (Mn);
}
/*int main()
{
int nn = 5;
int cc = 0;
vector < int > LL = {20, 20, 40, 20};
vector < int > DD = {390, 5, 400, 400, 390};
ll Mn = find_shortcut(nn, LL, DD, cc);
printf("%lld\n", Mn);
}*/
Compilation message
shortcut.cpp: In function 'int64_t find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:44:40: warning: array subscript is below array bounds [-Warray-bounds]
Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
~~~~~~~~~~~~^
shortcut.cpp:44:36: warning: array subscript is below array bounds [-Warray-bounds]
Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
~~~~~~~~^
shortcut.cpp:44:65: warning: array subscript is below array bounds [-Warray-bounds]
Mx = max(Mx, F2[a][0] + F2[b - 1][lb] + wlen + L[b] - L[b - 1]);
~~~~~~~^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
4344 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
6 ms |
4344 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
5 ms |
4344 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
5 ms |
4344 KB |
n = 3, 4 is a correct answer |
5 |
Correct |
6 ms |
4344 KB |
n = 2, 62 is a correct answer |
6 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
7 |
Correct |
5 ms |
4344 KB |
n = 3, 29 is a correct answer |
8 |
Correct |
5 ms |
4344 KB |
n = 2, 3 is a correct answer |
9 |
Correct |
5 ms |
4348 KB |
n = 2, 3 is a correct answer |
10 |
Correct |
5 ms |
4344 KB |
n = 2, 2000000001 is a correct answer |
11 |
Correct |
5 ms |
4344 KB |
n = 2, 3000000000 is a correct answer |
12 |
Correct |
5 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
13 |
Correct |
6 ms |
4344 KB |
n = 3, 3000000000 is a correct answer |
14 |
Runtime error |
11 ms |
8568 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
15 |
Halted |
0 ms |
0 KB |
- |