제출 #969780

#제출 시각아이디문제언어결과실행 시간메모리
969780starchanDetecting Molecules (IOI16_molecules)C++17
69 / 100
36 ms3420 KiB
#include<bits/stdc++.h> #include "molecules.h" using namespace std; #define in array<int, 2> #define pb push_back #define pob pop_back #define INF (int)1e17 #define MX (int)3e5+5 #define fast() ios_base::sync_with_stdio(false); cin.tie(NULL) vector<int> find_subset(int l, int r, vector<int> W) { int Sum = 0; int n = W.size(); vector<in> w(n); for(int i = 0; i < n; i++) { w[i] = {W[i], i}; Sum+=W[i]; } if((l <= Sum) && (Sum <= r)) { vector<int> v; for(int i = 0; i < n; i++) v.pb(i); return v; } sort(w.begin(), w.end()); int k, sl, sr; k = -1; sl = sr = 0; for(int i = 0; i < n; i++) { sl+=w[i][0]; sr+=w[n-1-i][0]; if((r >= sl) && (sr >= l)) { k = i+1; break; } } vector<int> v; if(k == -1) return v; vector<bool> vis(k, 1); vis.resize(n); int S = sl; for(int i = 0; i < min(k, n-k); i++) { if((l <= S) && (S <= r)) break; vis[n-1-i] = 1; vis[i] = 0; S+=(w[n-1-i][0]-w[i][0]); } if((l <= S) && (S <= r)) { for(int i = 0; i < n; i++) if(vis[i]) v.pb(w[i][1]); sort(v.begin(), v.end()); } return v; }
#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...