#include <bits/stdc++.h>
#include "shortcut.h"
using namespace std;
#define MOD 1000000007
#define ll long long int
#define vi vector<int>
#define vii vector< vector<int> >
#define PI 3.1415926535897932384626433832795
#define INF 9223372036854775807LL
#define hashA 1257958787
#define hashB 1539500609
#define endl "\n"
ll pref[10005];
vector<int> l;
vector<int> d;
int n,c;
ll getdist(ll a, ll b) {
if(a > b) {
swap(a,b);
}
return pref[b]-pref[a];
}
ll getcost(int b1, int b2) {
if(max(b1,b2) >= n) {
return INF;
}
ll mx = 0;
ll worstnormal = d[0];
ll worstshort = d[0]+getdist(0,b1);
for(int v = 1; v < n; v++) {
worstnormal+= l[v-1];
ll dist = worstnormal+d[v];
dist = min(dist,worstshort+c+getdist(v,b2)+d[v]);
worstshort = max(worstshort,getdist(v,b1)+d[v]);
worstnormal = max(worstnormal,(ll)d[v]);
mx = max(mx,dist);
}
return mx;
}
ll find_shortcut(int N, vector<int> L, vector<int> D, int C) {
n = N;
c = C;
l = L;
d = D;
ll ans = 0;
ll currdist = d[0];
for(int i = 1; i < n; i++) {
pref[i] = pref[i-1]+l[i-1];
}/*
for(int i = 1; i < n; i++) {
currdist+= l[i-1];
ans = max(ans,currdist+d[i]);
currdist = max(currdist,(ll)d[i]);
}*/
ll mn = INF;
for(int b1 = 0; b1 < n; b1++) {
int b2l = b1+1;
int b2r = n-1;
while(b2l < b2r) {
int b2 = (b2l+b2r)/2;
ll val1 = getcost(b1,b2);
ll val2 = getcost(b1,b2+1);
if(val2 > val1) {
b2r = b2;
} else {
b2l = b2+1;
}
mn = min(mn,val1);
mn = min(mn,val2);
}
mn = min(mn,getcost(b1,b2l));
mn = min(mn,getcost(b1,b2r));
}
return mn;
}
Compilation message
shortcut.cpp: In function 'long long int find_shortcut(int, std::vector<int>, std::vector<int>, int)':
shortcut.cpp:50:5: warning: unused variable 'ans' [-Wunused-variable]
ll ans = 0;
^~~
shortcut.cpp:51:5: warning: unused variable 'currdist' [-Wunused-variable]
ll currdist = d[0];
^~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
256 KB |
n = 4, 80 is a correct answer |
2 |
Incorrect |
2 ms |
376 KB |
n = 9, incorrect answer: jury 110 vs contestant 130 |
3 |
Halted |
0 ms |
0 KB |
- |