#include<bits/stdc++.h>
#include "insects.h"
using namespace std;
int n, t, sofarl;
bool up=true;
set<int> dontUse;
vector<int> machine;
bool check(int k) {
//cout << k << endl;
if(up) {
for(auto x : machine) dontUse.insert(x);
} else {
set<int> used;
for(auto x : machine) used.insert(x);
for(int i=0; i<n; i++) if(!used.count(i)) dontUse.insert(i);
int mm=machine.size();
for(int i=sofarl*t; i<mm; i++) move_outside(i);
for(int i=sofarl*t; i<mm; i++) machine.pop_back();
}
for(int i=0; i<n; i++) if(!dontUse.count(i)) {
machine.push_back(i);
move_inside(i);
if(press_button() > k) {
machine.pop_back();
move_outside(i);
}
}
// for(auto x : machine) cout << x << ' ';
// cout << endl;
// cout << (machine.size() == k*t ? "Yup" : "No") << endl;
return machine.size() == k*t;
}
int lastTrue(int lo, int hi) {
lo--;
while(lo < hi) {
sofarl=(lo == 0 ? 1 : lo);
int mid = lo+(hi-lo+1)/2;
if(check(mid)){
lo=mid;
up=true;
} else {
hi=mid-1;
up=false;
}
}
return lo;
}
int min_cardinality(int N) {
n=N;
for(int i=0; i<N; i++) {
machine.push_back(i);
move_inside(i);
if(press_button() == 1) continue;
machine.pop_back();
move_outside(i);
}
t=machine.size();
return lastTrue(1, (N/t)+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... |