제출 #830526

#제출 시각아이디문제언어결과실행 시간메모리
830526josanneo22드문 곤충 (IOI22_insects)C++17
100 / 100
50 ms428 KiB
#include <bits/stdc++.h> using namespace std; #define ld long double #define mp make_pair #define pb push_back #define pii pair<int,int> #define fi first #define se second /*草,以后一定要拿金牌啊!!! 注意数值范围拿分数哦*/ #include "insects.h" const int S=1e5+5; mt19937 rand1(time(0)); int l,r,cnt,cnt1,a[S],n; bool vs[S],vs1[S]; void ins(int x) {++cnt1;move_inside(x-1);} void dlt(int x) {--cnt1;move_outside(x-1);} int qry() {return press_button();} int min_cardinality(int N) { n=N; for(int i=1;i<=n;++i) { ins(i); if(qry()>1) dlt(i); else vs[i]=1,++cnt; } if(cnt==1) return n; l=2;r=n/cnt; while(l<=r) { int mid=(l+r)>>1; for(int i=1;i<=n;++i) {vs1[i]=0,a[i]=i;} shuffle(a+1,a+n+1,rand1); for(int i=1;i<=n;++i){ if(!vs[a[i]]) { if(cnt*mid<=cnt1) break; ins(a[i]); if(qry()>mid) dlt(a[i]); else vs1[a[i]]=1; } } if(cnt*mid<=cnt1) { l=mid+1; for(int i=1;i<=n;++i) if(vs1[i]) vs[i]=1; } else { r=cnt1/cnt; for(int i=1;i<=n;++i) { if(vs1[i]) dlt(i); else vs[i]=1; } } } return r; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...