#include "boxes.h"
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define ll long long
using namespace std;
ll dp[10000000], revdp[10000000], n, k, l;
vector<ll> p;
ll delivery(int N, int K, int L, int P[]) {
n = N; k = K; l = L;
for (int i=0;i<n;i++) {
p.pb(P[i]);
dp[i] = 0;
revdp[i] = 0;
}
dp[0] = 0; revdp[0] = 0;
ll leftlimit = n, rightlimit = n;
for (int i=0;i<n;i++) {
if (p[i] >= ceil(l/2)) {
leftlimit = i;
break;
}
dp[i + 1] = 2 * p[i] + dp[max((ll)0, i + 1 - k)];
}
for (int i=0;i<n;i++) {
if (p[n - i - 1] <= l/2) {
rightlimit = i;
break;
}
revdp[i + 1] = 2 * (l - p[n - i - 1]) + revdp[max((ll)0, i + 1 - k)];
}
ll ans = INT64_MAX;
ll start, end, count = 0;
if (l % 2 == 0) {
for (int i=0;i<n;i++) {
if (p[i] == l/2) {
count += 1;
end = i;
}
}
if (count == 0) {
ans = min(ans, dp[leftlimit] + revdp[rightlimit]);
if (leftlimit == 0 || rightlimit == 0) {
return ans;
}
end = leftlimit;
start = end - 1;
} else {
start = end - count + 1;
if (count % k != 0) count = k * (count / k + 1);
for (int i=end;i<start+count;i++) {
ans = min(ans, dp[max((ll)0, i - count + 1)] + revdp[max((ll)0, n - i)] + (count / k) * l);
}
}
count += k;
for (int i=end;i<start+count;i++) {
ans = min(ans, dp[max((ll)0, i - count + 1)] + revdp[max((ll)0, n - i)] + (count / k) * l);
}
} else {
end = leftlimit;
start = end - 1;
ans = min(ans, dp[leftlimit] + revdp[rightlimit]);
if (leftlimit == 0 || rightlimit == 0) {
return ans;
}
for (int i=end;i<start+k;i++) {
ans = min(ans, dp[max((ll)0, i - k + 1)] + revdp[max((ll)0, n - i)] + l);
}
}
//cout << dp[0] << ' '<< dp[1] << ' ' << dp[2] << endl;
//cout << revdp[0] << ' ' << revdp[1] << endl;
return ans;
}
# | 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... |