#include "shortcut.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll find_shortcut(int n, vector<int> l, vector<int> d, int c){
vector<ll> pathlength(n);
for (ll i = 1; i<n; i++){
pathlength[i]=pathlength[i-1]+l[i-1];
}
vector<ll> prefixmax(n);
vector<ll> suffixmax(n);
prefixmax[0]=pathlength[n-1]-pathlength[0]+d[0];
for (ll i = 1; i<n; i++){
prefixmax[i]=max(prefixmax[i-1],d[i]+pathlength[n-1]-pathlength[i]);
}
for (ll i = 0; i<n; i++){
prefixmax[i]-=pathlength[n-1]-pathlength[i];
}
suffixmax[n-1]=pathlength[n-1]-pathlength[0]+d[n-1];
for (ll i = n-2; i>=0; i--){
suffixmax[i]=max(suffixmax[i+1],d[i]+pathlength[i]-pathlength[0]);
}
for (ll i = 0; i<n; i++){
suffixmax[i]-=pathlength[i]-pathlength[0];
}
vector<ll> endspluspath(n);
vector<ll> endsminuspath(n);
for (ll i = 0; i<n; i++){
endspluspath[i]=d[i]+pathlength[i];
endsminuspath[i]=d[i]-pathlength[i];
}
ll mindist = 1e18;
/*for (int i : prefixmax){
cout<<i<<' ';
}cout<<'\n';
for (int i : suffixmax){
cout<<i<<' ';
}cout<<'\n';*/
for (ll a = 0; a<n-1; a++){
for (ll b = a+1; b<n; b++){
//try express road linking a and b
ll mxdist = 0;
//try thing-on-left to thing-on-right
mxdist = min(ll(c),pathlength[b]-pathlength[a])+suffixmax[b]+prefixmax[a];
//try thing-on-left to middle, thing-on-right to middle
//segmenttree-ify
for (ll x = a; x<=b; x++){
mxdist = max(mxdist,
min(
pathlength[b]-pathlength[x],
pathlength[x]-pathlength[a]+c
) + suffixmax[b] + d[x]);
mxdist = max(mxdist,
min(
pathlength[b]-pathlength[x]+c,
pathlength[x]-pathlength[a]
) + prefixmax[a] + d[x]);
}
//try thing-on-middle to thing-on-middle
for (ll m = a; m<b; m++){
for (ll n = a+1; n<=b; n++){
//from m to n
mxdist = max(mxdist,
min(
c+pathlength[b]-pathlength[n]+pathlength[m]-pathlength[a],
pathlength[n]-pathlength[m]
)+d[n]+d[m]);
}
}
//cout<<a<<' '<<b<<": "<<mxdist<<'\n';
mindist = min(mindist, mxdist);
}
}
return mindist;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Correct |
0 ms |
256 KB |
n = 9, 110 is a correct answer |
3 |
Correct |
1 ms |
324 KB |
n = 4, 21 is a correct answer |
4 |
Correct |
1 ms |
256 KB |
n = 3, 4 is a correct answer |
5 |
Incorrect |
0 ms |
256 KB |
n = 2, incorrect answer: jury 62 vs contestant 72 |
6 |
Halted |
0 ms |
0 KB |
- |