Submission #1320398

#TimeUsernameProblemLanguageResultExecution timeMemory
1320398unknownNile (IOI24_nile)C++20
67 / 100
2092 ms5396 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...