Submission #1244434

#TimeUsernameProblemLanguageResultExecution timeMemory
1244434im2xtremeNile (IOI24_nile)C++20
0 / 100
23 ms4680 KiB
#include "nile.h" #include <bits/stdc++.h> using namespace std; struct Artifact { int id; int weight; int A, B; int savings; }; vector<long long> calculate_costs(vector<int> W, vector<int> A, vector<int> B, vector<int> E) { int N = W.size(); int Q = E.size(); vector<Artifact> artifacts(N); for (int i = 0; i < N; ++i) { artifacts[i] = {i, W[i], A[i], B[i], A[i] - B[i]}; } sort(artifacts.begin(), artifacts.end(), [](const Artifact &a, const Artifact &b) { return a.weight < b.weight; }); vector<long long> R(Q); for (int qi = 0; qi < Q; ++qi) { int D = E[qi]; vector<bool> used(N, false); long long total = 0; int l = 0, r = N - 1; while (l < r) { while (l < r && used[l]) l++; while (l < r && used[r]) r--; if (l >= r) break; if (abs(artifacts[l].weight - artifacts[r].weight) <= D) { total += artifacts[l].B + artifacts[r].B; used[l] = used[r] = true; l++; r--; } else { if (artifacts[l].savings > artifacts[r].savings) { total += artifacts[l].A; used[l] = true; l++; } else { total += artifacts[r].A; used[r] = true; r--; } } } for (int i = 0; i < N; ++i) { if (!used[i]) total += artifacts[i].A; } R[qi] = total; } 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...