Submission #416563

#TimeUsernameProblemLanguageResultExecution timeMemory
416563amunduzbaevDetecting Molecules (IOI16_molecules)C++14
9 / 100
1 ms204 KiB
#include "bits/stdc++.h"
#include "molecules.h"
#ifndef EVAL
#include "grader.cpp"
#endif
using namespace std;
 
#define ff first
#define ss second
 
vector<int> find_subset(int l, int u, vector<int> w) {
	int n; n = (int)w.size();
	vector<pair<int, int>> tt;
	for(int i=0;i<n;i++) tt.push_back({w[i], i});
	sort(tt.begin(), tt.end());
	for(int i=0;i<n;i++){
		if(l <= tt[i].ff && tt[i].ff <= u) return {tt[i].ss};
	}
	if(w[0] > u) return {};
	int gap = u - l, in = -1, in2 = -1;
	
	for(int i=0;i<n;i++){
		if(w[i] <= l) in = i;
		if(w[i] <= gap) in2 = i;
	} assert(~in);
	
	int sum = 0;
	vector<int> res;
	while(in >= 0 && sum + tt[in].ff <= u) res.push_back(tt[in].ss), sum += tt[in].ff, in--;
	in = min(in, in2);
	if(l <= sum && sum <= u) return res;
	while(in >= 0 && sum + tt[in].ff <= u) res.push_back(tt[in].ss), sum += tt[in].ff, in--;
	if(l <= sum && sum <= u) 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...