Submission #1244431

#TimeUsernameProblemLanguageResultExecution timeMemory
1244431im2xtremeNile (IOI24_nile)C++20
6 / 100
2095 ms4680 KiB
#include "nile.h" #include <bits/stdc++.h> using namespace std; struct Artifact { int id; int weight; int cost_alone; int cost_pair; int savings; // A - B }; 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 by savings descending, and by weight if needed sort(artifacts.begin(), artifacts.end(), [](const Artifact &a, const Artifact &b) { if (a.savings != b.savings) return a.savings > b.savings; return a.weight < b.weight; }); vector<long long> R(Q); for (int q = 0; q < Q; ++q) { int D = E[q]; vector<bool> used(N, false); long long total_cost = 0; for (int i = 0; i < N; ++i) { if (used[i]) continue; int best_match = -1; for (int j = i + 1; j < N; ++j) { if (used[j]) continue; if (abs(artifacts[i].weight - artifacts[j].weight) <= D) { best_match = j; break; } } if (best_match != -1) { total_cost += artifacts[i].cost_pair + artifacts[best_match].cost_pair; used[i] = used[best_match] = true; } else { total_cost += artifacts[i].cost_alone; used[i] = true; } } R[q] = total_cost; } 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...