이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include"insects.h"
#include<iostream>
#include<vector>
#include<set>
using namespace std;
vector<bool>inside;
vector<bool>dead;
int num_inside;
int n,distinct;
int c_press_button(){
return press_button();
}
void c_move_inside(int a){
inside[a]=true;
num_inside++;
move_inside(a);
}
void c_move_outside(int a){
inside[a]=false;
num_inside--;
move_outside(a);
}
int get_distinct(){
for(int i=0;i<n;i++){
c_move_inside(i);
if(c_press_button()>1)
c_move_outside(i);
}
return num_inside;
}
int min_cardinality(int N){
n=N;
inside.resize(n);
distinct=get_distinct();
dead=inside;
int f=1;
int l=distinct,r=N-distinct;
while(l<=r){
int c=(r+2*l+1)/(2*l);
for(int i=0;i<n;i++)
if(!dead[i]&&inside[i]&&num_inside>l*f+c)
c_move_outside(i);
for(int i=0;i<n;i++)
if(!dead[i]&&!inside[i]){
c_move_inside(i);
if(c_press_button()>f+c)
c_move_outside(i);
}
if(num_inside==(f+c)*l){
f+=c;
for(int i=0;i<n;i++)
if(!dead[i]&&inside[i]){
r--;
dead[i]=true;
}
}else{
for(int i=0;i<n;i++)
if(!dead[i]&&!inside[i]){
r--;
dead[i]=true;
}
}
}
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... |