# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
229789 | 2020-05-06T14:11:35 Z | Tehillah | Detecting Molecules (IOI16_molecules) | C++14 | 0 ms | 0 KB |
#include "molecules.h" #include <map> #include <set> using namespace std; #define REP(i, a, b) for(int i=(int)(a); i<(int)(b); ++i) std::vector<int> find_subset(int l, int u, std::vector<int> w) { int n = w.size(); multiset<int> st; map<int, vector<int>> pos; REP(i, 0, n) { st.insert(w[i]); pos[w[i]].push_back(i); } vector<int> v; while(!st.empty()) { auto it = st.lower_bound(l); if(it == st.end()) --it; l -= *it; assert(!pos[*it].empty()); v.push_back(pos[*it].back()); pos[*it].pop_back(); st.erase(it); if(l <= 0) break; } int tot = 0; for(int x: v) { tot += w[x]; } if(tot < l || tot > u) { v.clear(); v.push_back(-1); } return v; }