이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |