제출 #1341473

#제출 시각아이디문제언어결과실행 시간메모리
1341473zowiDetecting Molecules (IOI16_molecules)C++20
9 / 100
1 ms344 KiB
#include "molecules.h"
#include <bits/stdc++.h>
using namespace std;


std::vector<int> find_subset(int l, int u, std::vector<int> w) {
	ios_base::sync_with_stdio(0);
	int a,b,n,x,m = 1e9,co = -1;
	n = w.size();
	vector<pair<int,int>> tab = {};
	for(int i = 0;i < n;++i)
	{
		x = w[i];
		tab.push_back({x,i});
		m = min(m,x);
	}
	sort(tab.begin(),tab.end());
	vector<int> pre = {0};
	for(int i = 1;i <= n;++i)
	{
		pre.push_back(pre.back()+tab[i-1].first-m);
	}
	cin >> l >> u;
	for(int i = 1;i <= n;++i)
	{
		a = pre[i];
		b = pre[n]-pre[n-i];
		l -= m;
		u -= m;
	//	cout << l << ' ' << u << ' ' << a << ' ' << b << endl;
		if((a <= l && l <= b) || (a <= u && u <= b) || (a <= l && u <= b) || (l <= a && b <= u))
		{
			co = i;
			break;
		}
	}
	l += co*m;
	u += co*m;
	//cout << l << ' ' << u << endl;
	vector<int> wyn;
	if(co == -1)
	{
		return wyn;
	}
	else
	{
		int ile = 0,ind = tab.size()-1;
		while((ind >= 0) && (ile < l))
		{
			if(ile+tab[ind].first > u) {ind--;continue;}
			ile += tab[ind].first;
			wyn.push_back(tab[ind].second);
			ind--;
		}
		sort(wyn.begin(),wyn.end());
		return wyn;
		
	}
}
#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...