Submission #409011

#TimeUsernameProblemLanguageResultExecution timeMemory
409011GurbanDetecting Molecules (IOI16_molecules)C++17
9 / 100
1 ms300 KiB
#include <bits/stdc++.h>
#include "molecules.h"
using namespace std;

using ll = long long;

const int maxn=2e5+5;
ll p[maxn];

vector<int> find_subset(int l, int u, vector<int> w) {
	vector<int>ans;
	if(l > u) return ans;
	ll cnt = 0;
	for(int i = 0;i < (int)w.size();i++){
		if(w[i] >= l and w[i] <= u){
			ans.push_back(i);
			return ans;
		}
		if(w[i] < l) cnt += w[i];
	}
	if(cnt < l) return ans;
	
	vector<pair<int,int>>v;
	for(int i = 0;i < (int)w.size();i++) v.push_back({w[i],i});
	sort(v.begin(),v.end());
	
	// for(auto i : v){
	// 	cout<<i.first<<' '<<i.second<<'\n';
	// }

	int lft = 0,rgt = (int)w.size()-1;
	ll lft_s = 0,rgt_s = 0;
	while(lft < (int)w.size() and rgt >= 0){
		lft_s += v[lft++].first;
		rgt_s += v[rgt--].first;
		if(lft_s >= l and lft_s <= u){
			for(int i = 0;i < lft;i++) ans.push_back(v[i].second);
			return ans;
		}
		if(rgt_s >= l and rgt_s <= u){
			for(int i = rgt+1;i < (int)w.size();i++) ans.push_back(v[i].second);
			return ans;
		}
		if(lft_s > u) return ans;
		if(rgt_s < l) continue;
		if(lft_s < l and rgt_s > u){
			for(int i = 0;i < lft;i++){
				if(lft_s < l){
					lft_s += v[rgt].first-v[i].first;
					ans.push_back(v[rgt].second);
				}
				else ans.push_back(v[i].second);
				rgt++;
			}
			return ans;
		}
	}
}

// int main(){
// 	ios::sync_with_stdio(false);
// 	cin.tie(0);

// 	int n,l,r; cin >> n >> l >> r;
// 	vector<int>w(n);
// 	for(int i = 0;i < n;i++) cin >> w[i];
// 	vector<int> ans = find_subset(l,r,w);
// 	for(auto i : ans) cout<<i<<' ';
// }

Compilation message (stderr)

molecules.cpp: In function 'std::vector<int> find_subset(int, int, std::vector<int>)':
molecules.cpp:23:23: warning: control reaches end of non-void function [-Wreturn-type]
   23 |  vector<pair<int,int>>v;
      |                       ^
#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...