Submission #778171

#TimeUsernameProblemLanguageResultExecution timeMemory
778171vjudge1Detecting Molecules (IOI16_molecules)C++17
0 / 100
0 ms212 KiB
//#pragma once
#include <bits/stdc++.h>
using namespace std;
#define sp " "
#include "molecules.h"
#define endl "\n"
#define pb push_back
#define pii pair<int, int>
#define st first
#define nd second
#define ll long long

vector<int> find_subset(int l, int u, vector<int> w){
	vector<pii> v;
	int n = w.size();


	vector<int> ans, vis(n, 0), zero;

	ll sum = 0;
	for (int i = 0; i < n; i++){
		if (sum >= l && sum <= u) return ans;
		if (sum > u) break;
		ans.pb(i + 1);
		sum += w[i];
	}
	if (sum >= l && sum <= u) return ans;
	return zero;
//////////////////////////////////////////////
	for (int i = 0; i < n; i++){
		v.pb({w[i], i});
	}
	sort(v.begin(), v.end());
	int it = n - 1;
	while(sum <= u && it >= 0){
		sum += v[it].st;
		vis[it] = 1;
		if (sum <= u && sum >= l){
			for (int i = 0; i < n; i++){
				if (vis[i]) ans.pb(v[i].nd + 1);
			}
			return ans;
		}
		it--;
	}
	return ans;
	//cout<<sum<<endl;
	int i = 0, j = n - 1;
	while(sum > u && i <= it && j > it){
		vis[j] = 0, vis[i] = 1;
		sum += v[i].st - v[j].st;
		i++, j--;
		//cout<<sum<<endl;
	}

	if (sum <= u && sum >= l){
		for (int i = 0; i < n; i++){
			if (vis[i]) ans.pb(v[i].nd + 1);
		}
	}
	return ans;
}
#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...