제출 #1235669

#제출 시각아이디문제언어결과실행 시간메모리
1235669Muhammad_Aneeq드문 곤충 (IOI22_insects)C++17
96.88 / 100
18 ms428 KiB
#include "insects.h" #include <vector> #include <bitset> #include <map> #include <set> #include <iostream> using namespace std; int const sz=2010; bitset<sz>ind,ind1,alw; bitset<sz>ver[sz]={}; int ask() { return press_button(); } int min_cardinality(int N) { int colors=0; for (int i=0;i<N;i++) { ind[i]=1; move_inside(i); colors++; if (ask()>1) { ind[i]=0; move_outside(i); colors--; } else alw[i]=1; } ver[1]=ind; set<int>s; s.insert(1); for (int i=0;i<N;i++) ind1[i]=1-ind[i]; int cnt=colors; int st=1,en=N/colors+1; while (st+1<en) { int mid=(st+en)/2; auto z=s.lower_bound(mid); z--; int pre=*z; for (int i=0;i<N;i++) { if (ver[pre][i]==ind[i]) continue; if (ask()==mid&&cnt==mid*colors) break; if (ver[pre][i]) { move_inside(i); ind[i]=1; ind1[i]=0; cnt++; } else { move_outside(i); ind[i]=0; ind1[i]=1; cnt--; } } for (int i=0;i<N;i++) { if (cnt==colors*mid) break; if (ind1[i]) { move_inside(i); ind[i]=1; cnt++; if (ask()>mid) { cnt--; move_outside(i); ind[i]=0; } } } if (cnt==colors*mid) { st=mid; if (st+1>=en) break; for (int i=0;i<N;i++) { if (ind[i]) ind1[i]=0; } } else { en=mid; if (st+1>=en) break; for (int i=0;i<N;i++) { if (ind[i]) continue; else ind1[i]=0; } } s.insert(mid); ver[mid]=ind; } return st; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...