Submission #670034

#TimeUsernameProblemLanguageResultExecution timeMemory
670034illyakrDetecting Molecules (IOI16_molecules)C++14
31 / 100
4 ms852 KiB
#include <bits/stdc++.h>
#include "molecules.h"

using namespace std;

vector<int> find_subset(int l, int u, vector<int> w) {
    int n = w.size();
    vector<int> res;
    multiset<pair<int, int> > inuse;
    multiset<pair<int, int> > store;
    long long sum = 0;
    for (int i = 0; i < n; i++) {
        if (sum + w[i] <= u) {
            inuse.insert({w[i], i});
            sum += w[i];
        } else {
            store.insert({w[i], i});
        }
    }
    while (true) {
//        cout << sum << " <<< " << endl;
//        cout << "inuse " << inuse.size() << endl;
//        for (auto [val, id] : inuse)
//            cout << val << " " << id << endl;
//        cout << "store " << store.size() << endl;
//        for (auto [val, id] : store)
//            cout << val << " " << id << endl;
//        cout << "-------------------------" << endl;

        if (l <= sum && sum <= u)break;
        if (store.empty() || inuse.empty())break;
        auto have = *inuse.begin();
        auto can = *(--store.end());
        if (have.first < can.first) {
            inuse.erase(inuse.begin());
            sum -= have.first;
            store.erase(--store.end());

            store.insert(have);
            sum += can.first;
            inuse.insert(can);
        } else {
            break;
        }
    }
    if (l <= sum && sum <= u) {
        for (auto [val, id] : inuse)
            res.push_back(id);
    }
    return res;
}

/**
4 15 17
6 8 8 7

4 14 15
5 5 6 6

4 10 20
15 17 16 18
*/

Compilation message (stderr)

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:47:19: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   47 |         for (auto [val, id] : inuse)
      |                   ^
#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...