이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#include "insects.h"
using namespace std;
int BO[2009];
int a,b,c,d,e,i,j,ii,jj,zx,xc,f[2009],fx[2009],p[2009],pi;
vector <int> vv;
void ins(int q){
if(BO[q]==1) return;
BO[q]=1;
move_inside(q-1);
}
void outs(int q){
if(BO[q]==0) return;
BO[q]=0;
move_outside(q-1);
}
int ask(){
return press_button();
}
void clea(){
for(int h=1; h<=a; h++){
if(BO[h]==1){
outs(h);
BO[h]=0;
}
}
}
void rec(int q, int w, vector <int> vv){
int i;
if(vv.size()==0) return;
if(q==w){
for(vector <int>::iterator it=vv.begin(); it!=vv.end(); it++){
f[(*it)]=p[q];
}
return;
}
int mid=(q+w)/2;
for(i=q; i<=mid; i++){
ins(p[i]);
}
vector <int> qw,we;
for(vector <int>::iterator it=vv.begin(); it!=vv.end(); it++){
ins((*it));
if(ask()==2){
qw.push_back((*it));
}else{
we.push_back((*it));
}
outs((*it));
}
//clea();
if(q==mid){
clea();
}else{
int MID=(q+mid)/2;
for(i=MID+1; i<=mid; i++){
outs(p[i]);
}
}
rec(q,mid,qw);
clea();
rec(mid+1,w,we);
}
int min_cardinality(int N) {
a=N;
for(i=1; i<=a; i++){
ins(i);
if(ask()==2){
outs(i);
vv.push_back(i);
continue;
}
pi++;p[pi]=i;
f[i]=i;
}
clea();
rec(1,pi,vv);
/*for(i=1; i<=a; i++) cout<<f[i]<<" ";
cout<<"\n";
return 2300;*/
for(i=1; i<=a; i++){
fx[f[i]]++;
}
zx=a+2;
for(i=1; i<=a; i++){
if(fx[i]==0) continue;
zx=min(zx,fx[i]);
}
return zx;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |