Submission #847449

#TimeUsernameProblemLanguageResultExecution timeMemory
847449NeroZeinRarest Insects (IOI22_insects)C++17
94.76 / 100
39 ms840 KiB
#include "insects.h" #include "bits/stdc++.h" using namespace std; int min_cardinality(int N) { int distinct = 0; vector<bool> inserted(N); for (int i = 0; i < N; ++i) { move_inside(i); int most_freq = press_button(); if (most_freq > 1) { move_outside(i); } else { inserted[i] = true; distinct++; } } vector<bool> bad(N); int l = 1, r = N / distinct; while (l < r) { int mid = (l + r + 1) / 2; for (int i = 0; i < N; ++i) { if (bad[i]) { continue; } move_inside(i); int most_freq = press_button(); if (most_freq > mid) { move_outside(i); } else { move_inside(i); inserted[i] = true; } } int cnt = accumulate(inserted.begin(), inserted.end(), 0); if (cnt == distinct * mid) {//inserted indices must not be removed under any condition l = mid; for (int i = 0; i < N; ++i) { if (inserted[i]) { bad[i] = true; } } } else {//non-inserted indices must not be inserted under any condition r = mid - 1; for (int i = 0; i < N; ++i) { if (!inserted[i]) { bad[i] = true; } else if (!bad[i]) { inserted[i] = false; move_outside(i); } } } } return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...