Submission #102824

#TimeUsernameProblemLanguageResultExecution timeMemory
102824dnassDetecting Molecules (IOI16_molecules)C++14
69 / 100
7 ms768 KiB
#include "molecules.h" #include <cstdio> #include <algorithm> #include <utility> #include <vector> #include <iostream> #include <cstring> using namespace std; int n; pair<int, 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); int sum = 0; int ind = n-1; for(int i=0;i<n;i++){ if(sum+wi[i].first<=u){ sum += wi[i].first; chosen[i] = true; }else{ ind = i-1; break; } } if(ind==n-1){ if(l<=sum&&sum<=u){ for(int i=0;i<n;i++){ ans.push_back(i); } } return ans; } if(l<=sum&&sum<=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(l<=sum&&sum<=u){ for(int i=0;i<n;i++){ if(chosen[i]){ ans.push_back(wi[i].second); } } return ans; } a--; } 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...