#include "insects.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ari2 = array<int, 2>;
using ari3 = array<int, 3>;
using arl2 = array<ll, 2>;
using arl3 = array<ll, 3>;
template <class T> using vt = vector<T>;
#define all(x) begin(x), end(x)
#define size(x) (int((x).size()))
#define REP(a,b,c,d) for(int a=(b);(d)>0?a<=(c):a>=(c);a+=(d))
#define FOR(a,b,c) REP(a,b,c,1)
#define ROF(a,b,c) REP(a,b,c,-1)
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int min_cardinality(int N) {
vt<int> A, B;
FOR(i, 0, N-1) {
move_inside(i);
if (!size(A) || press_button() == 1) {
A.push_back(i);
} else {
move_outside(i);
B.push_back(i);
}
}
int cur = size(A), cnt = size(A);
int lo = 1, hi = N / size(A);
while (lo < hi) {
const int mid = lo + hi + 1 >> 1;
shuffle(all(B), rng);
set<int> C;
for (const auto &i : B) {
if (cnt == mid * size(A))
break;
move_inside(i);
if (cur + size(C) + 1 <= mid || press_button() <= mid)
C.insert(i), cnt++;
else
move_outside(i);
}
if (cnt == mid * size(A)) {
cur = lo = mid;
vt<int> new_b;
if (lo < hi)
for (const auto &i : B)
if (!C.count(i))
new_b.push_back(i);
B = new_b;
} else {
hi = mid - 1;
cnt -= size(C);
if (lo < hi)
for (const auto &i : C)
move_outside(i);
B = vt<int>(all(C));
}
}
return lo;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |