Submission #1130993

#TimeUsernameProblemLanguageResultExecution timeMemory
1130993TraianDanciuRarest Insects (IOI22_insects)C++20
0 / 100
0 ms396 KiB
#include "insects.h"
#include <vector>

int min_cardinality(int n) {
  int distincte, i, st, dr, mij, cnt;
  std::vector<int> out, new_in, new_out;

  distincte = 0;
  for(i = 0; i < n; i++) {
    move_inside(i);
    if(press_button() == 1) {
      distincte++;
    } else {
      move_outside(i);
      out.push_back(i);
    }
  }

  cnt = distincte;
  st = 1;
  dr = n / distincte + 1;
  while(dr - st > 1) {
    mij = (st + dr) / 2;

    new_in = new_out = {};
    cnt = 0;
    for(i = 0; i < (int)out.size(); i++) {
      move_inside(out[i]);
      if(press_button() == mij + 1) {
        move_outside(out[i]);
        new_out.push_back(out[i]);
      } else {
        cnt++;
        new_in.push_back(out[i]);
      }
    }

    if(cnt == distincte * mij) {
      st = mij;
      // Pe cele din new_in o sa le lasam inauntru mereu
      out = new_out;
    } else {
      dr = mij;
      // Pe cele din new_out nu o sa le mai folosim niciodata
      for(i = 0; i < (int)new_in.size(); i++) {
        cnt--;
        move_outside(new_in[i]);
      }
      out = new_in;
    }
  }

  return st;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...