Submission #234218

#TimeUsernameProblemLanguageResultExecution timeMemory
234218wiwihoDetecting Molecules (IOI16_molecules)C++14
69 / 100
1093 ms3960 KiB
#include "molecules.h"

//#define NDEBUG

#include <bits/stdc++.h>
#include <bits/extc++.h>

#define StarBurstStream ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define iter(a) a.begin(), a.end()
#define riter(a) a.rbegin(), a.rend()
#define lsort(a) sort(iter(a))
#define gsort(a) sort(riter(a))
#define mp(a, b) make_pair(a, b)
#define pb(a) push_back(a)
#define eb(a) emplace_back(a)
#define pf(a) push_front(a)
#define pob pop_back()
#define pof pop_front()
#define F first
#define S second
#define printv(a, b) {bool pvaspace=false; \
for(auto pva : a){ \
    if(pvaspace) b << " "; pvaspace=true;\
    b << pva;\
}\
b << "\n";}
#define pii pair<int, int>
#define pll pair<ll, ll>
#define tiii tuple<int, int, int>
#define mt make_tuple
#define gt(t, i) get<i>(t)
#define iceil(a, b) ((a) / (b) + !!((a) % (b)))

//#define TEST

typedef long long ll;
typedef unsigned long long ull;

using namespace std;
using namespace __gnu_pbds;

const ll MOD = 1000000007;
const ll MAX = 2147483647;

template<typename A, typename B>
ostream& operator<<(ostream& o, pair<A, B> p){
    return o << '(' << p.F << ',' << p.S << ')';
}

vector<int> find_subset(int l, int u, vector<int> w) {

    int n = w.size();
    vector<pii> t(n);
    for(int i = 0; i < n; i++){
        t[i] = mp(w[i],i );
    }

    lsort(t);
    for(int i = 1; i <= n; i++){
        cerr << i << "\n";
        ll sum = 0;
        vector<bool> c(n);
        for(int j = 0; j < i; j++) sum += t[j].F, c[j] = true;
//        printv(c, cerr);
        if(sum >= l && sum <= u){
            vector<int> ans;
            for(int j = 0; j < n; j++) if(c[j]) ans.eb(t[j].S);
            return ans;
        }

        for(int j = 0; i - 1 < n - j - 1 && j < i; j++){
            c[j] = false;
            c[n - j - 1] = true;
            sum -= t[j].F;
            sum += t[n - j - 1].F;
//            printv(c, cerr);
            if(sum >= l && sum <= u){
                vector<int> ans;
                for(int k = 0; k < n; k++) if(c[k]) ans.eb(t[k].S);
                return ans;
            }
        }
    }

    return vector<int>();

}


#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...