제출 #1339636

#제출 시각아이디문제언어결과실행 시간메모리
1339636hyyh드문 곤충 (IOI22_insects)C++20
53.16 / 100
59 ms492 KiB
#include "insects.h"
#include <bitset>
#include <iostream>
#include <stack>
#include <set>

using namespace std;

int const N_MAX = 2e5+10;

bitset<N_MAX> cur;
bitset<N_MAX> last;

int S;
int k = 0;
int si = 0;

bool check(int n){
  for(int i{};i < S;i++){
    if(cur[i]) continue;
    move_inside(i);
    cur[i] = 1;
    si++;
    int p = press_button();
    if(p > n){
      move_outside(i);
      cur[i] = 0;
      si--;
    }
  }
  // for(auto k:cur) cout << k << " ";
  // cout << endl;
  //cout << si << " " << n << " " << k <<  endl;
  return (si == n*k);
}

int min_cardinality(int N) {
  S = N;
  for(int i{};i < N;i++){
    move_inside(i);
    si++;
    cur[i] = 1;
    int p = press_button();
    if(p == 2){
      move_outside(i);
      si--;
      cur[i] = 0;
    }
    else k++;
  }
  int l = 1;
  int r = N/k;
  last = cur;
  while(l < r){
    int md = l+(r-l+1)/2;
    //cout << md << endl;
    //cout << cur << endl;
    if(check(md)){
      l = md;
      last = cur;
    }
    else{
      bitset<N_MAX> remove = cur&(~last);
      for(int i{};i < S;i++){
        if(remove[i]){
          move_outside(i);
          si--;
        }
      }
      cur = last;
      r = md-1;
    }
  }
  return l;
}
//TTTTFFFF
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...