void move_inside(int i);
void move_outside(int i);
int press_button();
int min_cardinality(int N);
#include <iostream>
#include <vector>
#include <set>
int size;
int type;
bool markBS[2010];
std::set<int> ins;
int cnt=0;
bool bs(int lim){
for(int i=0;i<size;i++){
if(markBS[i])continue;
move_inside(i);
if(press_button()>lim){
move_outside(i);
}
else{
cnt+=1;
ins.insert(i);
}
if(cnt>=lim*type){
for(auto mu:ins){
markBS[mu]=true;
}
return true;
}
//std::cout <<cnt << '*';
}
for(int i=0;i<size;i++){
markBS[i]=true;
}
for(auto mu:ins){
markBS[mu]=false;
move_outside(mu);
cnt-=1;
}
ins.clear();
return false;
}
int pbv;
std::set<int> clearList;
int clear(){
for(auto c:clearList){
move_outside(c);
}
clearList.clear();
return 0;
}
int minL(){
int count = 0;
for(int i=0;i<size;i++){
move_inside(i);
pbv = press_button();
if(pbv>1){
move_outside(i);
}
else{
count+=1;
clearList.insert(i);
}
}
clear();
return count;
}
int min_cardinality(int N) {
size=N;
type = minL();
if(type==1)return size;
int l=1,r=1+(size/type);
while(l<r){
int mid = (l+r+1)/2;
if(bs(mid)){
l=mid;
}
else{
r=mid-1;
}
//std::cout << cnt << ' ' << l << ' ' << mid << ' ' << r << '\n';
}
return l;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |