// codigo da clara
#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 l, int r){
return uniform_int_distribution<int>(l,r)(rng);
}
int min_cardinality(int N) {
vector<bool> in(N), block(N), ss(N);
vector<int> ord(N);
int colors = 0, n = N;
rng.seed(time(nullptr));
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)/2, qtd = 0;
if(r == 1) return 1;
shuffle(all(ord), rng);
int rem = n;
for(int i : ord) {
// if(qtd + rem < colors*mid)
// break;
if(qtd == colors*mid) break;
if(in[i]) { qtd++; continue; }
if(block[i]) continue;
in[i] = 1;
move_inside(i);
rem--;
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... |