Submission #1003542

#TimeUsernameProblemLanguageResultExecution timeMemory
1003542LuvidiDetecting Molecules (IOI16_molecules)C++17
100 / 100
35 ms8896 KiB
#include "molecules.h"

#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fs first
#define sc second
#define pb push_back

std::vector<int> find_subset(int l, int u, std::vector<int> w) {
    int n=w.size();
    vector<pll> v;
    for(int i=0;i<n;i++){
        v.pb({w[i],i});
    }
    sort(v.begin(),v.end());
    ll pre[n+1];
    pre[0]=0;
    for(int i=1;i<=n;i++)pre[i]=pre[i-1]+v[i-1].fs;
    for(int len=1;len<=n;len++){
        if(pre[len]>u)continue;
        if(pre[n]-pre[n-len]<l)continue;
        ll s=pre[len];
        vector<int> idx;
        for(int i=0;i<len;i++)idx.pb(i);
        idx.pb(n);
        for(int i=len-1;i>-1;i--){
            if(s>=l)break;
            idx[i]=idx[i+1]-1;
            s-=v[i].fs;
            s+=v[idx[i]].fs;
        }
        idx.pop_back();
        for(int &i:idx)i=v[i].sc;
        return idx;
    }
    return std::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...