제출 #1277837

#제출 시각아이디문제언어결과실행 시간메모리
1277837jump드문 곤충 (IOI22_insects)C++20
99.83 / 100
18 ms464 KiB
void move_inside(int i); void move_outside(int i); int press_button(); int min_cardinality(int N); #include <iostream> #include <vector> #include <set> #include <map> int size; int type; bool markBS[2010]; int cnt=0; std::map<int,bool> cache; bool bs(int lim){ std::set<int> ins; if(cache.find(lim)!=cache.end())return cache[lim]; for(int i=0;i<size;i++){ if(markBS[i])continue; move_inside(i); if(press_button()>lim){ move_outside(i); } else{ cnt+=1; ins.insert(i); } if(cnt>=lim*type){ for(auto mu:ins){ markBS[mu]=true; } cache[lim]=1; return true; } //std::cout <<cnt << '*'; } for(int i=0;i<size;i++){ markBS[i]=true; } for(auto mu:ins){ markBS[mu]=false; move_outside(mu); cnt-=1; } ins.clear(); cache[lim]=0; return false; } int pbv; std::set<int> clearList; int clear(){ for(auto c:clearList){ move_outside(c); } clearList.clear(); return 0; } int minL(){ int count = 0; for(int i=0;i<size;i++){ move_inside(i); pbv = press_button(); if(pbv>1){ move_outside(i); } else{ count+=1; clearList.insert(i); markBS[i]=true; cnt+=1; } } return count; } int min_cardinality(int N) { size=N; type = minL(); if(type==1)return size; int l=1,r=1+(size/type); int bstUse = 0; while(l<r){ bstUse+=1; int mid = (l+r+1)/2; if(bs(mid)){ l=mid; } else{ r=mid-1; } //std::cout << cnt << ' ' << l << ' ' << mid << ' ' << r << '\n'; } //std::cout << bstUse <<"*\n"; return l; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...