# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
321818 | 2020-11-13T12:07:43 Z | nikatamliani | Detecting Molecules (IOI16_molecules) | C++14 | 0 ms | 0 KB |
#include "molecules.h" #include <bits/stdc++.h> using namespace std; vector<int> find_subset(int l, int u, vector<int>w) { int n = w.size(); vector<int> indices(n); for(int i = 0; i < n; ++i) { indices[i] = i; } sort(indices.begin(), indices.end(), [&](int x, int y) { return w[x] > w[y]; }); #define ll long long vector<int> result; ll sum = 0, save = 0; for(int i = 0; i < n; ++i) { int index = indices[i]; sum += w[index]; result.push_back(index); ++cnt; if(sum >= l) { save = i + 1; break; } } int ptr = 0; while(save < n && sum > u && ptr < result.size()) { sum -= w[result[ptr]]; result[ptr] = indices[save++]; sum += w[result[ptr++]]; } if(sum <= u) { assert(sum >= l); return result; } return vector<int>{}; }