Submission #708005

#TimeUsernameProblemLanguageResultExecution timeMemory
708005MODDIDetecting Molecules (IOI16_molecules)C++14
9 / 100
1 ms316 KiB
//#include "molecules.h" #include <bits/stdc++.h> #define pii pair<int,int> #define ll long long #define vi vector<int> #define mp make_pair #define pb push_back #define fi first #define se second using namespace std; bool can[10000 * 10000]; vi get_ans(int l, int r, vector<pii> arr){ vi ans; for(int i = l; i <= r; i++){ ans.pb(arr[i].se); } return ans; } vector<int> find_subset(int d, int u, vector<int> w) { int n = w.size(); vector<pii> arr; for(int i = 0; i < n; i++) arr.pb(mp(w[i], i)); sort(arr.begin(), arr.end()); int pref[n]; pref[0] = arr[0].fi; for(int i = 1; i < n; i++) pref[i] = pref[i-1] + arr[i].fi; int cur_sum = 0; for(int i = 0; i < n; i++){ cur_sum += arr[i].fi; if(cur_sum >= d && cur_sum <= u){ return get_ans(0, i, arr); } else if(cur_sum > u){ int l = 0, r = i; while(l <= r){ int mid = l + (r - l) / 2; int cur = pref[r]; if(mid > 0) cur -= pref[mid-1]; if(cur >= d && cur <= u){ cout<<cur<<endl; return get_ans(mid, i, arr); } else if(cur < l){ r = mid - 1; } else l = mid + 1; } } else continue; } return {}; }
#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...