#include "insects.h"
#include <bits/stdc++.h>
using namespace std;
bool visited[2000],es_indep[2000];
vector<int> indep;
vector<pair<int,int>> rango;
int suma[2000],n,mini=1e9;
void solve(int x,int y){
  if(x==y){
    return;
  }
  int mid=(x+y)>>1;
  for(int i=x;i<=mid;i++){
    move_outside(indep[i]);
  }
  for(int i=0;i<n;i++){
    if(es_indep[i]){
      continue;
    }
    if(rango[i]==make_pair(x,y)){
      move_inside(i);
      if(press_button()==2){
        rango[i]={mid+1,y};
      }else{
        rango[i]={x,mid};
      }
      move_outside(i);
    }
  }
  solve(mid+1,y);
  for(int i=x;i<=mid;i++){
    move_inside(indep[i]);
  }
  for(int i=mid+1;i<=y;i++){
    move_outside(indep[i]);
  }
  solve(x,mid);
}
int min_cardinality(int N){
  n=N;
  for(int i=0;i<N;i++){
    move_inside(i);
    if(press_button()==1){
      indep.push_back(i);
      es_indep[i]=true;
      suma[indep.size()-1]++;
    }else{
      move_outside(i);
    }
  }
  rango.assign(N,{0,indep.size()-1});
  solve(0,indep.size()-1);
  for(int i=0;i<n;i++){
    if(!es_indep[i]){
      suma[rango[i].first]++;
    }
  }
  for(int i=0;i<2000;i++){
    if(suma[i]==0){
      break;
    }
    mini=min(mini,suma[i]);
  }
  return mini;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |