Submission #485199

#TimeUsernameProblemLanguageResultExecution timeMemory
485199couplefireDetecting Molecules (IOI16_molecules)C++17
100 / 100
49 ms6296 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

vector<int> find_subset(int _l, int _r, vector<int> _w){
    ll l = _l, r = _r;
    vector<ll> w; int n = _w.size();
    for(auto x : _w) w.push_back(x);
    vector<int> id(w.size());
    iota(id.begin(), id.end(), 0);
    sort(id.begin(), id.end(), [&](int a, int b){return w[a]<w[b];});
    ll lsum = 0, rsum = 0; vector<int> res;
    for(int siz = 1; siz<=n; ++siz){
        lsum += w[id[siz-1]];
        rsum += w[id[n-siz]];
        if(l<=lsum && lsum<=r){
            for(int i = 0; i<siz; ++i)
                res.push_back(id[i]);
            return res;
        }
        if(l<=rsum && rsum<=r){
            for(int i = 0; i<siz; ++i)
                res.push_back(id[n-1-i]);
            return res;
        }
        if(rsum<l || lsum>r) continue;
        int gap = n-siz;
        for(int i = siz-1; i>=0; --i){
            lsum -= w[id[i]], lsum += w[id[i+gap]];
            if(l<=lsum && lsum<=r){
                for(int j = 0; j<i; ++j)
                    res.push_back(id[j]);
                for(int j = i; j<siz; ++j)
                    res.push_back(id[j+gap]);
                return res;
            }
        }
    }
    return {};
}
#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...