Submission #352310

#TimeUsernameProblemLanguageResultExecution timeMemory
352310David_MDetecting Molecules (IOI16_molecules)C++14
100 / 100
58 ms5484 KiB
#include "molecules.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define ll long long
using namespace std;
vector<int> find_subset(int l, int u, vector<int> w) {
	int n=w.size(), x=0;
	ll ans=0;
	pair<ll, int> p[n];
	bool f[n];
	memset(f, 0, sizeof(f));
	for (int i=0; i<n; i++)p[i]={w[i], i};
	sort(p, p+n);
	
	while(x<n&&ans+p[x].F<l)f[x]^=1,ans+=p[x++].F;
	if(x<n&&ans+p[x].F>=l&&ans+p[x].F<=u){
		vector<int> Ans;
		for (int j=0; j<=x; j++)Ans.pb(p[j].S);
		sort(Ans.begin(), Ans.end());
		return Ans;		
	}
	for (int i=x-1; i>=0; i--){
		f[i+n-x]^=1; f[i]^=1;
		ans+=p[i+n-x].F-p[i].F;
		if(ans>=l&&ans<=u){
			vector<int> Ans;
			for (int j=0; j<n; j++)if(f[j])Ans.pb(p[j].S);
			sort(Ans.begin(), Ans.end());
			return Ans;
		}
	}
    return 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...