#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
long long delivery(int N, int K, int L, int p[]) {
vector<int> left, right;
for (int i = 0; i < N; i++)
if (p[i] <= L / 2) {
left.push_back(p[i]);
} else
right.push_back(p[i]);
// cerr << left.size() << " " << right.size() << "\n";
// cout << (left.empty() ? 0 : left.back() * 2) +
// (right.empty() ? 0 : (N - right.front()) * 2)
// << "\n";
// return min(L, (left.empty() ? 0 : left.back() * 2) +
// (right.empty() ? 0 : (L - right.front()) * 2));
long long ans = 0;
reverse(left.begin(), left.end());
for (int i = 0; i + K <= left.size(); i += K) {
ans += 2 * left[i];
}
for (int i = 0; i + K <= right.size(); i += K) {
ans += 2 * (L - right[i]);
}
reverse(left.begin(), left.end());
reverse(right.begin(), right.end());
vector<int> newl, newr;
for (int i = 0; i < left.size() % K; i++) newl.push_back(left[i]);
for (int i = 0; i < right.size() % K; i++) newr.push_back(right[i]);
reverse(newr.begin(), newr.end());
// cout << ans << "\n";
// assert(newl.empty() && newr.empty());
// return ans;
if (newl.size() + newr.size() <= K) {
return ans + min((long long)L,
(newl.empty() ? 0ll : newl.back() * 2ll) +
(newr.empty() ? 0ll : (L - newr.front()) * 2ll));
} else {
vector<int> all;
for (auto a : newl) all.push_back(a);
for (auto a : newr) all.push_back(a);
return ans + L + 2ll * min(all[all.size() - K], (L - all[K]));
}
}
# | 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... |