Submission #102227

#TimeUsernameProblemLanguageResultExecution timeMemory
102227dnassDetecting Molecules (IOI16_molecules)C++14
9 / 100
3 ms512 KiB
#include "molecules.h" #include <cstdio> #include <algorithm> #include <utility> #include <vector> #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]){ 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; } } 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...