Submission #571119

#TimeUsernameProblemLanguageResultExecution timeMemory
571119stevancvDetecting Molecules (IOI16_molecules)C++14
100 / 100
52 ms5812 KiB
#include <bits/stdc++.h> #include "molecules.h" #define ll long long #define ld long double #define sp ' ' #define en '\n' #define smin(a, b) a = min(a, b) #define smax(a, b) a = max(a, b) using namespace std; const int N = 1e5 + 2; const int M = 1e9; int mod = 1000000007; vector<int> find_subset(int L, int R, vector<int> W) { int n = W.size(); ll l = L; ll r = R; vector<ll> w(n); for (int i = 0; i < n; i++) w[i] = W[i]; vector<int> order(n); iota(order.begin(), order.end(), 0); sort(order.begin(), order.end(), [&] (int i, int j) { return w[i] < w[j]; }); ll sum = 0; int kolko = 0; for (int i : order) { if (sum + w[i] <= r) { sum += w[i]; kolko++; } } vector<int> ans; for (int i = 0; i < kolko; i++) { ans.push_back(order[i]); } if (sum >= l) return ans; ll fali = l - sum; int lo = 0, hi = n - 1; while (lo < kolko && kolko <= hi) { ll delta = w[order[hi]] - w[order[lo]]; fali -= delta; ans[lo] = order[hi]; if (fali <= 0) break; lo += 1; hi -= 1; } sum = 0; for (int i = 0; i < kolko; i++) sum += w[ans[i]]; if (sum < l) return {}; 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...