Submission #366746

#TimeUsernameProblemLanguageResultExecution timeMemory
366746BartolMDetecting Molecules (IOI16_molecules)C++17
100 / 100
58 ms6240 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; #define X first #define Y second #define mp make_pair #define pb push_back typedef long long ll; typedef pair <int, int> pii; typedef pair <int, pii> pip; typedef pair <pii, int> ppi; typedef pair <ll, ll> pll; const int INF=0x3f3f3f3f; const int N=10003; const int MAX=5e5+2; int n; vector <pii> v; vector <int> sol; vector<int> find_subset(int l, int u, vector<int> w) { n=w.size(); for (int i=0; i<n; ++i) { if (w[i]<l) v.pb(mp(w[i], i)); else if (w[i]<=u) { sol.pb(i); return sol; } } sort(v.begin(), v.end()); n=v.size(); ll mini=0, maxi=0; int siz=0; for (int i=1; i<=n; ++i) { mini+=v[i-1].X; maxi+=v[n-i].X; if (mini>u) return sol; if (mini<=u && maxi>=l) { siz=i; break; } } // printf("siz: %d\n", siz); ll sum=0; for (int i=0; i<siz; ++i) sum+=v[i].X; for (int i=siz; i<=n; ++i) { // printf("i: %d, sum: %lld\n", i, sum); if (sum>u) return sol; if (sum>=l && sum<=u) { for (int j=i-siz; j<i; ++j) sol.pb(v[j].Y); return sol; } if (i==n) { // printf("bla\n"); return sol; } sum+=v[i].X; sum-=v[i-siz].X; } return sol; }
#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...