Submission #107997

#TimeUsernameProblemLanguageResultExecution timeMemory
107997FiloSanzaDetecting Molecules (IOI16_molecules)C++14
0 / 100
3 ms384 KiB
#include "molecules.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> build(multiset<int>& el, const vector<int>& w){
    vector<int> sol;
    for(auto i : w)if(el.count(i)){
        el.erase(i);
        sol.push_back(i);
    }
    return sol;
}

vector<int> find_subset(int l, int u, vector<int> w) {
    sort(w.begin(), w.end());
    long long sum = 0;

    multiset<int> el;
    for(auto i : w) sum += 1LL*i, el.insert(i);

    while(!el.empty()){
        if(sum < l) return vector<int>(0);
        if(sum >= l && sum <= u) return build(el, w);
        long long diff = sum - u;
        auto it = el.lower_bound(diff);

        if(it == el.end())
            it = prev(el.end());
        sum -= *it;
        el.erase(it);
    }

    return vector<int>(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...