Submission #957505

#TimeUsernameProblemLanguageResultExecution timeMemory
957505androDetecting Molecules (IOI16_molecules)C++14
0 / 100
1 ms440 KiB
#include <bits/stdc++.h>
#include "molecules.h"
using namespace std;
int check(int x, int l, int r) {
    return l >= x && x <= r;
}
std::vector<int> find_subset(int l, int u, std::vector<int> w) {
    int n = w.size();
    map<int, deque<int>> ids;
    for(int i = 0; i < n; i++) {
        ids[w[i]].push_back(i);
    }
    sort(w.begin(), w.end());
    vector<int> d(n + 1);
    for(int i = 0; i < n; i++) {
        for(int j = i; j < n; j++) {
            if(u - l >= w[i] - w[j]) {
                d[i] = j;
            }
        }
    }
    vector<int> ans;
    for(int i = 0; i < n; i++) {
        multiset<int> ms;
        for(int j = i; j < d[i]; j++) {
            ms.insert(w[j]);
        }
        // s + x <= r
        // x <= r - s
        int s = 0;
        int ok = 0;
        while(1) {
            auto it = ms.upper_bound(u - s);
            if(it == ms.begin()) {
                ans.clear();
                break;
            }
            it--;
            int x = *it;
            s += x;
            ans.push_back(x);
            ms.erase(x);
            if(s >= l) {
                ok = 1;
                break;
            }
        }
        if(ok) {
            break;
        }
    }
    vector<int> p;
    for(auto it : ans) {
        p.push_back(ids[it].front());
        ids[it].pop_front();
    }
    return p;
}/*
signed main(){
    for(auto it:find_subset(10, 20, {15, 17,
                             16, 18}))cout<<it<<" ";
}
*/
#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...