#include "insects.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define all(x) x.begin(), x.end()
#define sz(x) (int)x.size()
#define mk make_pair
#define pb push_back
#define fr first
#define sc second
mt19937 rng;
int rand(int a, int b) {
    return uniform_int_distribution<int>(a,b)(rng);
}
int min_cardinality(int N) {
    mt19937 rng(time(nullptr));
    vector<bool> in(N), block(N), ss(N);
    vector<int> ord(N);
    int colors = 0, n = N;
    for(int i = 0; i < N; i++) {
        ord[i] = i;
        move_inside(i);
        in[i] = 1;
        if(press_button() == 2) move_outside(i), in[i] = 0; 
        else colors++;
        if(in[i]) ss[i] = 1;
    }
    if(colors == 1) return N;
    int l = 1, r = N/colors;
    while(l <= r) {
        int mid = (l+r+1)/2, qtd = 0;
        if(r == 1) return 1;
        shuffle(all(ord), rng);
        for(int i : ord) {
            if(qtd == colors*mid) break;
            if(in[i]) { qtd++; continue; }
            if(block[i]) continue;
            in[i] = 1;
            move_inside(i);
            if(press_button() > mid) move_outside(i), in[i] = 0;
            else qtd++;
        }
        if(qtd == colors*mid) {
            l = mid+1;
            for(int i = 0; i < N; i++) ss[i] = in[i];
        }
        else {
            r = mid-1;
            for(int i = 0; i < N; i++) {
                if(ss[i]) continue;
                if(in[i]) move_outside(i), in[i] = 0;
                else n -= (block[i] == 0), block[i] = 1;
            }
            r = min(r, n/colors);
        }
    }
    
    return l-1;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |