Submission #159417

#TimeUsernameProblemLanguageResultExecution timeMemory
159417MounirDetecting Molecules (IOI16_molecules)C++14
9 / 100
3 ms380 KiB
#include <bits/stdc++.h> using namespace std; struct Molecule { int val, id; bool operator < (const Molecule &autre) const { return val < autre.val; } }; vector<int> resoudre(int borneMin, int borneMax, vector<int> poid) { vector<Molecule> poids; for (int i = 0; i < (int)poid.size(); ++i) poids.push_back({poid[i], i}); sort(poids.begin(), poids.end()); int sumCur = 0, id; for (id = poids.size() -1; id >= 0; --id) { sumCur += poids[id].val; if (sumCur >= borneMin) break; } if (sumCur >= borneMin && sumCur <= borneMax) { //On a trouvé un ensemble convainquant vector<int> solu; for (int i = id; i < (int)poids.size(); ++i) solu.push_back(poids[i].id); return solu; } else if (sumCur < borneMin) { return {}; } else { int left = 0, right = poids.size() - 1; for (int i = 0; i < id; ++i) { sumCur += poids[i].val; sumCur -= poids[poids.size() - 1 - i].val; if (sumCur >= borneMin && sumCur <= borneMax) { left = i; right = poids.size() - 1 -i; } } if (!(sumCur >= borneMin && sumCur <= borneMax)) return {}; vector<int> solu; for (int i = 0; i <= left;++i) solu.push_back(poids[i].id); for (int i = id; i <= right; ++i) solu.push_back(poids[i].id); return solu; } } vector<int> find_subset(int l, int u, vector<int> w) { return resoudre(l, u, w); } /* int main() { int l, u, n; cin >> l >> u >> n; vector<int> a; for (int i = 0; i < n; ++i) { int b;cin>>b; a.push_back(b); } a = find_subset(l, u, a); for (int i : a) cout << i << " "; cout << endl; return 0; } */
#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...