Submission #1211241

#TimeUsernameProblemLanguageResultExecution timeMemory
1211241madamadam3Detecting Molecules (IOI16_molecules)C++20
9 / 100
0 ms328 KiB
#include "molecules.h" #include <bits/stdc++.h> using namespace std; // const int MAX_SUM = 500'000; // using bset = bitset<MAX_SUM+1>; int n, l, u; vector<int> o, w; int check_closest(int k) { int cur_sum = 0; for (int idx = k; idx < n; idx++) { int i = o[idx]; if (cur_sum + w[i] <= u) { cur_sum += w[i]; } } // cout << "k = " << k << " sum = " << cur_sum << "\n"; return l - cur_sum; } vector<int> find_subset(int L, int U, vector<int> W) { w = W; n = w.size(); l = L; u = U; o.resize(n); iota(o.begin(), o.end(), 0); sort(o.begin(), o.end(), [&](int a, int b) {return w[a] < w[b];}); reverse(o.begin(), o.end()); int lo = 0, hi = n; while (lo < hi) { int mid = lo + (hi - lo) / 2; int ans1 = check_closest(mid), ans2 = check_closest(mid+1); if (ans1 < ans2) { hi = mid; } else { lo = mid + 1; } } vector<int> ans; int cur_sum = 0; // cout << "lo = " << lo << "\n"; for (int idx = lo; idx < n; idx++) { int i = o[idx]; if (cur_sum + w[i] <= u) { cur_sum += w[i]; ans.push_back(i); } } if (cur_sum < l || cur_sum > u) ans.clear(); return ans; }

Compilation message (stderr)

molecules.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
molecules_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#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...