Submission #1191083

#TimeUsernameProblemLanguageResultExecution timeMemory
1191083AmrRarest Insects (IOI22_insects)C++20
47.50 / 100
60 ms448 KiB
#include "insects.h"

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define sz size()
#define F first
#define S second
#define fast ios::base_sync_with_stdio(0); cin.tie(0); cout.tie(0);

int min_cardinality(int N) {

    vector<ll> v;
    for(int i = 0; i < N; i++)
    {
        move_inside(i);
        if(press_button()!=1) move_outside(i);
        else v.push_back(i);
    }
    ll cnt = v.sz;
    for(int i = 0; i < v.sz; i++) move_outside(v[i]);
    v.clear();

    //cout << "cnt: " << cnt << endl;

    if(cnt<1)
    {
        set<ll> s;
        for(int i = 0; i< N; i++) s.insert(i);
        ll mn = N;
        for(int times = 0; times < cnt-1; times++)
        {
            auto it = s.begin();
            while(it!=s.end())
            {
                ll x = *it;
                move_inside(x);
                if(press_button()!=v.sz+1) move_outside(x), it++;
                else{
                    v.push_back(x);
                    it = s.erase(it);
                }
            }
            for(int i = 0; i < v.sz; i++) move_outside(v[i]);

            //cout << "cur"<< times << " : " << v.sz << endl;
            mn = min(mn, (ll)v.sz);
            v.clear();
        }
        //cout << s.sz << endl;
        mn = min(mn, (ll)s.sz);
        return mn;
    }
    else
    {
        ll l = 1, r = N/cnt;
        while(l<r)
        {
            ll mid = r-(r-l)/2;
            for(int i = 0; i < N; i++)
            {
                move_inside(i);
                if(press_button()>mid) move_outside(i);
                else v.push_back(i);
            }
            if(cnt * mid == v.sz) l = mid;
            else r = mid-1;

            // clear
            for(int i = 0; i < v.sz; i++) move_outside(v[i]);
            v.clear();
        }
        return l;
    }

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