제출 #652611

#제출 시각아이디문제언어결과실행 시간메모리
652611BlagojRarest Insects (IOI22_insects)C++17
0 / 100
0 ms208 KiB
#include "insects.h"
#include <bits/stdc++.h>

using namespace std;

bool good[2001];

int Unique(int N)
{
  int cnt = 0;
  for (int i = 0; i < N; i++)
  {
    move_inside(i);
    if (press_button() == 2)
    {
      move_outside(i);
      continue;
    }
    good[i] = false;
    cnt++;
  }
  return cnt;
}


int min_cardinality(int N) {
  // move_inside(int i);
  // void move_outside(int i);
  // press_button();
  for (int i = 0; i < N; i++)
  {
    good[i] = true;
  }
  int unique = Unique(N);
  int l = 1, r = N / unique, mid, placed = unique;
  while (l + 1 < r)
  {
    mid = (l + r) / 2;
    int area = placed;
    queue<int> bad;
    queue<int> used;
    for (int i = 0; i < N; i++)
    {
      if (good[i])
      {
        move_inside(i);
        if (press_button() > mid)
        {
          bad.push(i);
          move_outside(i);
        }
        else
        {
          used.push(i);
          area++;
        }
      }
    }
    if (area == unique * mid)
    {
      while (!used.empty())
      {
        good[used.front()] = false;
        used.pop();
      }
      placed = area;
      l = mid;
    }
    else
    {
      while (!bad.empty())
      {
        good[bad.front()] = false;
        bad.pop();
      }
      while (!used.empty())
      {
        move_outside(used.front());
        used.pop();
      }
      r = mid;
    }
  }
  return l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...