Submission #1070040

#TimeUsernameProblemLanguageResultExecution timeMemory
1070040TheQuantiXDetecting Molecules (IOI16_molecules)C++17
69 / 100
1092 ms8492 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; ll n, m, q, k, x, y, a, b, c; vector<int> gen(ll x, vector< pair<ll, ll> > &v, ll l, ll u) { vector<int> st; vector<int> ans; ll num = 0; for (int i = 0; i < x; i++) { st.push_back(i); num += v[i].first; } ll e = n - 1; while (num < l) { ll x = st[st.size() - 1]; num -= v[x].first; num += v[x + 1].first; if (x + 1 == e) { ans.push_back(v[x + 1].second); st.pop_back(); e--; } else { st[st.size() - 1]++; } } for (auto i : st) { ans.push_back(v[i].second); } return ans; } vector<int> find_subset(int l, int u, vector<int> w) { n = w.size(); vector<int> ans; vector< pair<ll, ll> > v; ll sum = 0; for (int i = 0; i < n; i++) { if (w[i] >= l && w[i] <= u) { ans.push_back(i); return ans; } v.push_back({w[i], i}); sum += w[i]; } sort(v.begin(), v.end()); ll mn = 0, mx = 0; for (int i = 0; i < n; i++) { mn += v[i].first; mx += v[n - 1 - i].first; // cout << mn << ' ' << mx << '\n'; if (min(mx, (ll)u) >= max(mn, (ll)l)) { return gen(i + 1, v, l, u); } } 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...