This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "shortcut.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int MAXN = 1e6+5;
#define all(x) x.begin(), x.end()
#define mk make_pair
#define pb push_back
#define f first
#define s second
ll find_shortcut(int n, vector<int> l, vector<int> d, int c) {
vector<ll> diam_L(n), diam_R(n), dist_L(n), dist_R(n);
dist_L[0] = diam_L[0] = d[0];
for(int i = 1; i < n; i++) {
dist_L[i] = max((ll)d[i], dist_L[i-1] + l[i-1]);
diam_L[i] = max(diam_L[i-1], dist_L[i-1] + l[i-1] + d[i]);
}
dist_R[n-1] = diam_R[n-1] = d[n-1];
for(int i = n-2; i >= 0; i--) {
dist_R[i] = max((ll)d[i], dist_R[i+1] + l[i]);
diam_R[i] = max(diam_R[i+1], dist_R[i+1] + l[i] + d[i]);
}
ll resp = 1e18;
for(int i = 0; i < n; i++) { // escolhendo onde resp1 vai estar
ll sum = 0;
for(int j = i+1; j < n; j++) { // escolhendo onde resp2 vai estar
sum += l[j-1];
ll diam = max({diam_R[i+1], diam_L[j-1], dist_L[i] + dist_R[j] + min((ll)c, sum)});
resp = min(resp, diam);
}
}
return resp;
}
# | 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... |