제출 #1034813

#제출 시각아이디문제언어결과실행 시간메모리
1034813Mr_Husanboy드문 곤충 (IOI22_insects)C++17
25 / 100
228 ms940 KiB
#include "insects.h"
#include <bits/stdc++.h>
 
using namespace std;
 
#define ff first
#define ss second
#define all(a) (a).begin(), (a).end()
#define ll long long
const int mod = 1000002022;
 
vector<int> state, p;
int n, m; 
vector<vector<int>> g;
template<typename T>
int len(T &a){return a.size();}
 
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());
 
void shuffle(vector<int> &a, int n){
  if(n == 1) return;
  random_shuffle(a.begin(), a.begin() + n);
  for(int i = 0; i < n; i ++){
    int aa = rng() % n, bb = rng() % n;
    while(bb == aa) bb = rng() % n;
    swap(a[aa], a[bb]);
  }
}
 
 
int min_cardinality(int n) {
 
  vector<int> v;
  vector<int> done(n);
  for(int i = 0; i < n; i ++){
    move_inside(i);
    if(press_button() == 2){
      move_outside(i);
    }else v.push_back(i), done[i] = 1;
  }
  if(len(v) == 1){
    return n;
  }
  int dis = len(v);

 
  auto check = [&](int m)->int{
    vector<int> rem;
    for(int i = 0; i < n; i ++){
      if(done[i]) continue;
      move_inside(i);
      if(press_button() <= m){
        rem.push_back(i);
      }else{
        move_outside(i);
      }
    }
    for(auto u : rem) move_outside(u);
    return dis + len(rem);
  };
  int cur = n / dis;
  while(cur > 1){
    int cnt = check(cur);
    //cout << cur << ' ' << cnt << endl;
    if(cnt == cur * dis){
      return cur;
    }else cur = cnt / dis;
  }
  return cur;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...