Submission #812730

#TimeUsernameProblemLanguageResultExecution timeMemory
812730andrei_boaca드문 곤충 (IOI22_insects)C++17
49.74 / 100
147 ms376 KiB
#include "insects.h" #include <bits/stdc++.h> //#include "stub.cpp" using namespace std; int cul[2005]; int n; vector<int> spec; struct date { int nod,l,r; }; vector<date> need; bool comp(date a, date b) { return a.l<b.l; } int f[2005]; int min_cardinality(int N) { n=N; cul[0]=1; spec.push_back(0); move_inside(0); int nr=1; for(int i=1;i<n;i++) { move_inside(i); int cnt=press_button(); if(cnt>=2) move_outside(i); else { nr++; cul[i]=nr; spec.push_back(i); } } for(int i=0;i<n;i++) if(cul[i]==0) need.push_back({i,0,(int)spec.size()-1}); for(int i:spec) move_outside(i); while(!need.empty()) { sort(need.begin(),need.end(),comp); vector<date> aux; int l=-1; int r=-1; for(date p:need) { int who=p.nod; int lft=p.l; int rgt=p.r; int mij=(lft+rgt)/2; if(l==-1) { l=lft; r=mij; for(int i=l;i<=r;i++) move_inside(spec[i]); } while(l>lft) { l--; move_inside(spec[l]); } while(r<mij) { r++; move_inside(spec[r]); } while(l<lft) { move_outside(spec[l]); l++; } while(r>mij) { move_outside(spec[r]); r--; } move_inside(who); int cnt=press_button(); move_outside(who); if(cnt>=2) { int st=l; int dr=r; if(st!=dr) aux.push_back({who,st,dr}); else cul[who]=cul[spec[st]]; } else { int st=mij+1; int dr=rgt; if(st!=dr) aux.push_back({who,st,dr}); else cul[who]=cul[spec[st]]; } } for(int i=l;i<=r;i++) move_outside(spec[i]); need=aux; } for(int i=0;i<n;i++) { assert(cul[i]>0); f[cul[i]]++; } int minim=1e9; for(int i=1;i<=nr;i++) minim=min(minim,f[i]); return minim; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...