This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "molecules.h"
#include <cstdio>
#include <algorithm>
#include <utility>
#include <vector>
#include <iostream>
#include <cstring>
using namespace std;
typedef long long int lld;
int n;
pair<lld, int> wi[200010];
bool chosen[200010];
vector<int> find_subset(int l, int u, vector<int> w) {
n = (int) w.size();
vector<int> ans;
memset(chosen, false, sizeof chosen);
for(int i=0;i<n;i++) wi[i] = make_pair(w[i], i);
sort(wi, wi+n);
lld sum = 0;
int ind = n-1;
for(int i=0;i<n;i++){
if(sum+wi[i].first<=(lld)u){
sum += wi[i].first;
chosen[i] = true;
}else{
ind = i-1;
break;
}
}
if(ind==n-1){
//cout <<"here"<<endl;
if((lld)l<=sum&&sum<=(lld)u){
for(int i=0;i<n;i++){
ans.push_back(i);
}
}
return ans;
}
if((lld)l<=sum&&sum<=(lld)u){
for(int i=0;i<n;i++){
if(chosen[i]){
ans.push_back(wi[i].second);
}
}
return ans;
}
int a = n-1;
while(chosen[n-a-1]&&!chosen[a]){
//cout << "here " << a << endl;
sum += wi[a].first-wi[n-a-1].first;
chosen[a] = true; chosen[n-a-1] = false;
if((lld)l<=sum&&sum<=(lld)u){
for(int i=0;i<n;i++){
if(chosen[i]){
ans.push_back(wi[i].second);
}
}
return ans;
}
a--;
}
return ans;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |