제출 #145650

#제출 시각아이디문제언어결과실행 시간메모리
145650karmaDetecting Molecules (IOI16_molecules)C++11
9 / 100
2 ms376 KiB
#include<bits/stdc++.h> #include "molecules.h" #define mp make_pair #define fi first #define se second using namespace std; typedef pair<int, int> pii; vector<int> find_subset(int l, int u, vector<int> w) { vector<pii> _w; vector<bool> used; vector<int> ans; ans.clear(); int n, pivot = -1, s = 0; n = w.size(); _w.resize(n); used.resize(n); for(int i = 0; i < n; ++i) { if(w[i] >= l && w[i] <= u) { ans.push_back(i); return ans; } _w[i] = mp(w[i], i); } sort(_w.begin(), _w.end()); for(int i = 0; i < n; ++i) { if(s + _w[i].fi <= u) s += _w[i].fi, used[_w[i].se] = 1, pivot = i; else used[_w[i].se] = 0; } if(s >= l && s <= u) { for(int i = 0; i < n; ++i) if(used[i]) ans.push_back(i); return ans; } for(int i = pivot + 1; i < n; ++i) { if(_w[i].fi > u) break; int upper = _w[i].fi - l + s, lower = _w[i].fi - u + s; int pos = lower_bound(_w.begin(), _w.end(), mp(lower, -1)) - _w.begin(); if(_w[pos].fi <= upper && _w[pos].fi >= lower && used[_w[pos].se]) { s -= _w[pos].fi; s += _w[i].fi; used[_w[pos].se] = 0, used[_w[i].se] = 1; break; } } if(s >= l && s <= u) { for(int i = 0; i < n; ++i) if(used[i]) ans.push_back(i); } 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...