Submission #859265

#TimeUsernameProblemLanguageResultExecution timeMemory
859265MasterDobbyRarest Insects (IOI22_insects)C++17
25 / 100
212 ms852 KiB
#include <bits/stdc++.h> #include "insects.h" #define all(a) a.begin(),a.end() #define pii pair<int,int> using namespace std; using ll = long long; bitset<2020> ch; int min_cardinality(int n){ int cnt=1; ch[0]=1; move_inside(0); for(int i=1;i<n;i++){ move_inside(i); int num=press_button(); if(num==1){ ch[i]=1; cnt++; } else{ move_outside(i); } } int ans=1; for(int i=2;i<=min((int)n/cnt,cnt);i++){ int cnt2=0; for(int j=0;j<n;j++){ if(cnt2==cnt) break; if(ch[j]) continue; move_inside(j); int num=press_button(); if(num==i){ ch[j]=1; cnt2++; } else{ move_outside(j); } } if(cnt2!=cnt) break; ans=i; } if(ans!=min((int)n/cnt,cnt)) return ans; int l=min((int)n/cnt,cnt),r=(int)n/cnt,now=cnt*min((int)n/cnt,cnt); while(l<r){ int mid=(l+r+1)/2; int cnt2=now; vector<int> nw; for(int j=0;j<n;j++){ if(cnt2==mid*cnt) break; if(ch[j]) continue; nw.push_back(j); move_inside(j); int num=press_button(); if(num<=mid){ ch[j]=1; cnt2++; } else{ move_outside(j); } } if(cnt2==mid*cnt) l=mid,now=cnt2; else{ r=mid-1; for(auto x:nw) move_outside(x),ch[x]=0; } } return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...