Submission #145220

#TimeUsernameProblemLanguageResultExecution timeMemory
145220mat_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 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; } vector<int>v; if(pref[n] < l)return v; tren = 0; for(int i=n-1; i>=0; i--){ tren += w[i]; suff[n - i] = tren; } int levo = n,d = 0; bool ima = 0; for(int i=0; i<=n; i++){ if(ima)break; ll sum = suff[i]; d = i; if(sum > u)break; if(dobar(sum + pref[levo])){ ima = 1; break; } if(ima)break; while(sum + pref[levo] > u){ if(dobar(sum + pref[levo])){ ima = 1; break; } if(ima)break; levo--; } if(ima)break; if(dobar(sum + pref[levo])){ ima = 1; break; } if(ima)break; } vector<int>rez; if(!ima){ return rez; } int koji = n - d; for(int i=1; i<=levo; i++)rez.push_back(i-1); for(int i=n-1; i>=koji; i--)rez.push_back(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...