#include "boxes.h"
#include <vector>
#include <algorithm>
#include <iostream>
#include <cassert>
using ll = long long;
#define debug(x) #x << " = " << x << '\n'
ll delivery(int n, int k, int L, int p[]) {
std::vector<std::pair<int, int>> v(n);
for (int i = 0; i < n; i++) {
v[i].first = std::min(p[i], L - p[i]);
v[i].second = p[i];
}
std::sort(v.begin(), v.end());
std::reverse(v.begin(), v.end());
std::vector<int> st, dr;
for (int i = 0; i < n; i++) {
if (v[i].first == v[i].second) {
st.push_back(v[i].first);
} else {
dr.push_back(v[i].first);
}
}
std::sort(st.begin(), st.end());
std::sort(dr.begin(), dr.end());
ll answer = 1e18;
std::vector<ll> sumst((int) st.size(), 0);
std::vector<ll> sumdr((int) dr.size(), 0);
for (int i = 0; i < (int) st.size(); i++) {
sumst[i] = st[i];
if (i >= k) {
sumst[i] += sumst[i - k];
}
}
for (int i = 0; i < (int) dr.size(); i++) {
sumdr[i] = dr[i];
if (i >= k) {
sumdr[i] += sumdr[i - k];
}
}
std::vector<ll> best(k, 1e18);
for (int cater = 0; cater <= (int) dr.size(); cater++) {
ll you = 0;
if (cater % k == 0) {
if (cater < (int) dr.size()) {
you += (ll) 2 * sumdr[(int) dr.size() - cater - 1];
}
you += (ll) L * (cater / k);
} else {
if (cater < (int) dr.size()) {
you += (ll) 2 * sumdr[(int) dr.size() - cater - 1];
}
you += (ll) L * (1 + cater / k);
}
best[cater % k] = std::min(best[cater % k], you);
}
for (int catel = 0; catel <= (int) st.size(); catel++) { // dintre turele full, cate sterg din st?
// catel + cater = 0 (mod k) <=> cater = k - catel (mod k)
ll me = 0;
if (catel < (int) st.size()) {
me += (ll) 2 * sumst[(int) st.size() - catel - 1];
}
me += (ll) L * (catel / k);
int you = catel % k == 0? 0 : k - catel % k;
answer = std::min(answer, me + best[you]);
}
return answer;
}
// daca da 70 si nu 100 e destul de troll
# | 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... |