#include <vector>
#include <numeric>
#include <algorithm>
using namespace std;
vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) {
int N = W.size();
vector<pair<int, int>> info(N);
for (int i = 0; i < N; i++) {
info[i] = make_pair(W[i], A[i] - B[i]);
}
sort(info.begin(), info.end());
vector<int> diff(N-1);
for (int i = 0; i < N-1; i++) {
diff[i] = info[i+1].first - info[i].first;
}
long long sum = accumulate(B.begin(), B.end(), 0LL);
int Q = E.size();
vector<long long> R(Q, sum);
int run, min_all, min_odd, current;
for (int j = 0; j < Q; j++) {
run = 0;
for (int i = 0; i < N-1; i++) {
if (diff[i] > E[j]) {
if ((i - run) % 2 == 0) {
min_all = min_odd = info[run].second;
for (int k = run; k <= i; k++){
current = info[k].second;
if (current < min_all and (diff[k-1]+diff[k]) <= E[j]) {
min_all = current;
}
if (current < min_odd and (k-run) % 2 == 0) {
min_odd = current;
}
}
R[j] += min(min_all, min_odd);
}
run = i+1;
}
}
if ((N-1 - run) % 2 == 0) {
min_all = min_odd = info[run].second;
for (int k = run; k <= N-1; k++){
current = info[k].second;
if (current < min_all and (diff[k-1]+diff[k]) <= E[j]) {
min_all = current;
}
if (current < min_odd and (k-run) % 2 == 0) {
min_odd = current;
}
}
R[j] += min(min_all, min_odd);
}
}
return R;
}
| # | 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... |