Submission #145226

#TimeUsernameProblemLanguageResultExecution timeMemory
145226mat_vDetecting Molecules (IOI16_molecules)C++14
9 / 100
3 ms376 KiB
#include <cstdio> #include <vector> #include <cassert> #include <bits/stdc++.h> #include "molecules.h" #define maxn 200005 #define pb push_back using namespace std; typedef long long ll; int n; ll pref[maxn]; ll suff[maxn]; int a,b; bool dobar(ll x){ if(x >=a && x<=b)return 1; return 0; } std::vector<int> find_subset(int l, int u, std::vector<int> w) { sort(w.begin(), w.end()); n = w.size(); ll tren = 0; a = l; b = u; for(int i=0; i<n; i++){ tren += w[i]; pref[i + 1] = tren; } if(dobar(pref[n])){ vector<int> rez; for(int i=0; i<n; i++)rez.push_back(i); return rez; } tren = 0; for(int i=n; i>=1; i--){ tren += w[i - 1]; suff[n - i + 1] = tren; } bool ima = 0; int le=0,de=0; for(int i=0; i<=n; i++){ //cout << i << endl; de = i; ll sum = suff[i]; // cout << i << " " << suff[i] << endl; if(sum > u)break; //cout << sum << endl; ll pom = l - sum; ll prvi; if(pom <= 0){ //cout << i << endl; ima = 1; break; } else{ prvi = lower_bound(pref, pref + n + 1, pom) - pref; } if(prvi > n)prvi = n; if(pref[prvi] + sum > pref[n])continue; if(dobar(pref[prvi] + sum)){ ima = 1; le = prvi; break; } } // cout << de << endl; vector<int>rez; if(!ima)return rez; int koji = n - de; for(int i=1; i<=le; i++)rez.pb(i - 1); for(int i=n-1; i>=koji; i--)rez.pb(i); return rez; }
#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...