Submission #1234120

#TimeUsernameProblemLanguageResultExecution timeMemory
1234120trimkusRarest Insects (IOI22_insects)C++20
50.02 / 100
54 ms436 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; int min_cardinality(int N) { vector<int> ord(N); iota(begin(ord), end(ord), 0); mt19937 rng(1); shuffle(begin(ord), end(ord), rng); vector<bool> vis(N); int inside = 0; int diff = 0; vector<int> took; auto calc = [&](int till, bool first = false) -> void { for (int i : ord) { if (vis[i]) continue; move_inside(i); if (press_button() > till) { move_outside(i); } else { took.push_back(i); inside += 1; vis[i] = 1; if (first) diff += 1; } } }; calc(1, true); int l = 1, r = N / inside + 1; // cout << diff << "\n"; while (l < r) { int mid = (l + r + (r - l > 5) + 1) / 2; while (press_button() > mid) { vis[took.back()] = 0; move_outside(took.back()); took.pop_back(); } int prv = 0; calc(mid); for (auto i : vis) prv += i; // cerr << mid << " = " << prv << " + " << took.size() << " , total = " << diff * mid << "\n"; if (prv == diff * mid) { l = mid; } else { r = mid - 1; } } return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...