Submission #1217344

#TimeUsernameProblemLanguageResultExecution timeMemory
1217344user736482Rarest Insects (IOI22_insects)C++20
99.80 / 100
15 ms488 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#include "insects.h"
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000002022
#define INF 1000000019
#define POT (1<<20)
#define INFL 1000000000000000099
bool czy[2007];
ll n;
void upd(ll a){
    if(czy[a])move_outside(a);
    else move_inside(a);
    czy[a]^=1;
}
ll gt(){return press_button();}
vector<ll>al;
void sh(){
    for(ll i=al.size()-1;i>=0;i--){
      //  swap(al[i],al[rand()%(i+1)]);
    }
}
int min_cardinality(int NN){
    al.clear();
    for(ll i=0;i<NN;i++)czy[i]=0;
    srand(15);
    n=NN;
    ll d=1;
    
    for(ll i=0;i<n;i++)al.pb(i);
    sh();
    upd(al[0]);
    vector<ll>v={al[0]},vpom;
    for(ll i=1;i<n;i++){
        upd(al[i]);
        if(gt()==2){upd(al[i]);vpom.pb(al[i]);}
        else {d++;v.pb(al[i]);}
    }
    if(d==1)return n;
    al=vpom;
    ll pocz=1;
    ll kon=n/d;
    while(pocz!=kon){
        //cout<<kon<<" ";
        ll mid=(pocz+kon+1+(1))/2;
        sh();
        ll ak=mid-pocz+d*pocz;
        vector<ll>v1,v2,v3;
        for(ll i=0;i<mid-pocz;i++){upd(al[i]);v2.pb(al[i]);}
        for(ll i=mid-pocz;i<al.size();i++){
            if(ak==mid*d){
                v1.pb(al[i]);
                continue;
            }
            if(ak+al.size()-i<mid*d){
              v3.pb(al[i]);
              continue;
            }
            upd(al[i]);
            if(gt()==mid+1){upd(al[i]);v1.pb(al[i]);}
            else {ak++;v2.pb(al[i]);}
        }
        if(ak==mid*d){
            al=v1;
            pocz=mid;
        }
        else{
            al=v2;
            for(ll i : v3)al.pb(i);
            kon=mid-1;
            for(ll i : v2)upd(i);
        }

        kon=min(kon,(ll)pocz+(ll)al.size()/d);
    }
    return pocz;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...