Submission #1211916

#TimeUsernameProblemLanguageResultExecution timeMemory
1211916simona1230Rarest Insects (IOI22_insects)C++20
0 / 100
0 ms408 KiB
#include "insects.h"
#include <bits/stdc++.h>
using namespace std;

int min_cardinality(int N)
{
    int d=0;
    vector<int> v;
    for(int i=0;i<N;i++)
    {
        move_inside(i);
        int x=press_button();
        if(x==2) move_outside(i);
        else v.push_back(i),d++;
    }

    for(int i=0;i<v.size();i++)
        move_outside(v[i]);

    vector<int> s;
    for(int i=0;i<N;i++)
        s.push_back(i);

        int b=0;
    int ans=1,l=2,r=N/d;
    while(l<=r)
    {

        int m=(l+r)/2;
        //cout<<l<<" "<<r<<" "<<m<<endl;
        vector<int> s1,s2;
        int f=0;
        int cnt=0,lim=s.size()-d*(m-ans);
        for(int i=0;i<s.size()&&!f;i++)
        {
            //cout<<s[i]<<" ";
            move_inside(s[i]);
            int x=press_button();
            if(x==m+1-ans)
            {
                s1.push_back(s[i]);
                move_outside(s[i]);
                cnt++;
            }
            else
            {
                s2.push_back(s[i]);
            }

            if(cnt>lim)
            {
                r=m-1;
                s=s2;
                for(int j=0;j<s2.size();j++)
                    move_outside(s2[j]);
                f=1;
                break;
            }
        }
        if(f==1)continue;
        //cout<<endl;
        for(int i=0;i<s2.size();i++)
            move_outside(s2[i]);
        //cout<<"= "<<s2.size()<<" "<<d<<" "<<m-ans<<endl;

        if(s2.size()==d*(m-ans))
        {
            ans=m;
            s=s1;
            l=m+1;
        }
        else r=m-1,s=s2;
    }

    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...