Submission #1070040

#TimeUsernameProblemLanguageResultExecution timeMemory
1070040TheQuantiXDetecting Molecules (IOI16_molecules)C++17
69 / 100
1092 ms8492 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

ll n, m, q, k, x, y, a, b, c;

vector<int> gen(ll x, vector< pair<ll, ll> > &v, ll l, ll u) {
    vector<int> st;
    vector<int> ans;
    ll num = 0;
    for (int i = 0; i < x; i++) {
        st.push_back(i);
        num += v[i].first;
    }
    ll e = n - 1;
    while (num < l) {
        ll x = st[st.size() - 1];
        num -= v[x].first;
        num += v[x + 1].first;
        if (x + 1 == e) {
            ans.push_back(v[x + 1].second);
            st.pop_back();
            e--;
        }
        else {
            st[st.size() - 1]++;
        }
    }
    for (auto i : st) {
        ans.push_back(v[i].second);
    }
    return ans;
}

vector<int> find_subset(int l, int u, vector<int> w) {
    n = w.size();
    vector<int> ans;
    vector< pair<ll, ll> > v;
    ll sum = 0;
    for (int i = 0; i < n; i++) {
        if (w[i] >= l && w[i] <= u) {
            ans.push_back(i);
            return ans;
        }
        v.push_back({w[i], i});
        sum += w[i];
    }
    sort(v.begin(), v.end());
    ll mn = 0, mx = 0;
    for (int i = 0; i < n; i++) {
        mn += v[i].first;
        mx += v[n - 1 - i].first;
        // cout << mn << ' ' << mx << '\n';
        if (min(mx, (ll)u) >= max(mn, (ll)l)) {
            return gen(i + 1, v, l, u);
        }
    }
    return ans;
}
#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...