제출 #1042551

#제출 시각아이디문제언어결과실행 시간메모리
1042551Alihan_8드문 곤충 (IOI22_insects)C++17
0 / 100
92 ms680 KiB
#include "insects.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define ar array #define all(x) x.begin(), x.end() template <class F, class S> bool chmin(F &u, const S &v){ bool flag = false; if ( u > v ){ u = v; flag |= true; } return flag; } int min_cardinality(int n) { vector <int> p; for ( int i = 0; i < n; i++ ){ move_inside(i); if ( press_button() == 1 ){ p.pb(i); } else{ move_outside(i); } } int k = (int)p.size(); if ( __lg(n / k + 1) >= k ){ // random stuff vector <int> us(n); for ( auto &j: p ){ move_outside(j); } p.clear(); vector <int> f; while ( !*min_element(all(us)) ){ int cnt = 0; for ( int i = 0; i < n; i++ ){ if ( us[i] ) continue; move_inside(i); if ( press_button() == cnt + 1 ){ cnt += 1; p.pb(i); } else{ move_outside(i); } } f.pb(cnt); for ( auto &x: p ){ us[x] = 1; move_outside(x); } p.clear(); } return *min_element(all(f)); } for ( auto &x: p ){ move_outside(x); } p.clear(); vector <int> us(n), tmp, rem; auto ok = [&](int m){ int cnt = 0; tmp = p; rem.clear(); for ( int i = 0; i < n; i++ ){ if ( us[i] ) continue; move_inside(i); if ( press_button() > m ){ move_outside(i); rem.pb(i); } else{ tmp.pb(i); cnt += 1; } } return cnt == k * m; }; int l = 1, r = n / k + 1; while ( l + 1 < r ){ int m = (l + r) / 2; if ( ok(m) ){ for ( auto &x: p ){ us[x] = 1; } l = m; } else{ for ( auto &x: rem ){ us[x] = 1; } r = m; } } return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...