이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "boxes.h"
using namespace std;
int n, k, l;
long long solveLeft (long long lim, int p[]) {
int takenLeft = 0;
long long len = 0;
for (long long i = lim - 1; i >= 0; --i) {
if (takenLeft == 0) {
len += 2LL * p[i];
}
++takenLeft;
if (takenLeft == k) {
takenLeft = 0;
}
}
return len;
}
long long solveRight (long long lim, int p[]) {
long long len = 0;
int takenRight = 0;
for (long long i = lim; i < n; ++i) {
if (takenRight == 0) {
len += 2LL * (l - p[i]);
}
++takenRight;
if (takenRight == k) {
takenRight = 0;
}
}
return len;
}
pair <long long, long long> fullTrip (long long lim, int p[]) {
int taken = 0;
long long left = lim - 1, right = lim;
// debug(left); debug(right);
while (taken < k and (left >= 0 or right < n)) {
if (left >= 0 and right < n) {
if (l < p[left] + p[right]) {
--left, ++taken;
} else {
++right, ++taken;
}
} else if (left >= 0) {
--left, ++taken;
} else {
++right, ++taken;
}
}
return make_pair(left, right);
}
#define debug(x) cout << #x << " = " << x << endl
long long delivery (int N, int K, int L, int p[]) {
int mid = (L + 1) >> 1;
// debug(mid);
long long half = lower_bound(p, p + N, mid) - p;
long long other = upper_bound(p, p + N, mid) - p;
// debug(half); debug(other);
n = N, k = K, l = L;
// cout << solveLeft(half, p) << " " << solveRight(half, p) << endl;
long long ret = solveLeft(half, p) + solveRight(half, p);
ret = min(ret, solveLeft(other, p) + solveRight(other, p));
// debug(ret);
// debug(left); debug(right);
pair <long long, long long> f1 = fullTrip(half, p);
pair <long long, long long> f2 = fullTrip(other, p);
ret = min(ret, L + solveLeft(f1.first + 1, p) + solveRight(f1.second, p));
ret = min(ret, L + solveLeft(f2.first + 1, p) + solveRight(f2.second, p));
return ret;
}
# | 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... |