# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
988528 | 2024-05-25T06:03:29 Z | cnn008 | Rarest Insects (IOI22_insects) | C++17 | 0 ms | 0 KB |
#include "bits/stdc++.h" using namespace std; #include "insects.h" #ifdef N_N_C #include "debug.h" #else #define cebug(...) "Arya" #endif #define ll long long const int N=1e5+5; const int mod=1e9+7; int min_cardinality(int n){ set <int> s; int cad=0; auto add = [&](int i) -> void{ s.insert(i); move_inside(i); }; auto del = [&](int i) -> void{ s.erase(i); move_outside(i); }; auto clear = [&]() -> void{ auto _s=s; for(auto i:_s) del(i); }; auto check = [&](int k) -> bool{ for(int i=0; i<n; i++){ if(s.find(i)!=s.end()) continue; add(i); if(press_button()>k) del(i); } bool f=((int)s.size()>=cad*k); return f; }; for(int i=0; i<n; i++){ add(i); if(press_button()==1) cad++; else del(i); } clear(); if(cad<=9){ vector <int> vis(n,0); int type=0; for(int i=0; i<n; i++){ if(!vis[i]){ vis[i]=++type; move_inside(i); for(int j=i+1; j<n; j++){ move_inside(j); int val=press_button(); if(val==2) vis[j]=type; move_outside(j); } move_outside(i); } } map <int,int> mp; for(int i=0; i<n; i++) mp[vis[i]]++; int ans=INT_MAX; for(auto [x,y]:mp) ans=min(ans,y); return ans; } int l=2,r=n/cad,ans=1; while(l<=r){ int mid=(l+r)/2; if(check(mid,f)){ ans=mid; l=mid+1; }else{ r=mid-1; clear(); } } return ans; } /** /\_/\ * (= ._.) * / >💖 \>💕 **/