Submission #1240985

#TimeUsernameProblemLanguageResultExecution timeMemory
1240985guagua0407Rarest Insects (IOI22_insects)C++20
100 / 100
14 ms428 KiB
#include "insects.h"
//#include "stub.cpp"
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define f first
#define s second
#define all(x) x.begin(),x.end()

namespace{
    const int B=0;
    const int inf=1e9;
    const int mxn=2000;
    vector<bool> in(mxn); 
}

int min_cardinality(int n) {
    vector<int> p(n);
    for(int i=0;i<n;i++){
        p[i]=i;
    }
    mt19937 rng(time(NULL));
    shuffle(all(p),rng);
    auto movein=[&](int x){
        move_inside(p[x]);
    };
    auto moveout=[&](int x){
        move_outside(p[x]);
    };
    vector<bool> in(n);
    int var=0;
    for(int i=0;i<n;i++){
        movein(i);
        in[i]=true;
        if(press_button()==2){
            moveout(i);
            in[i]=false;
        }
        else{
            var++;
        }
    }  
    vector<int> vec;
    for(int i=0;i<n;i++){
        vec.push_back(i);
    }
    int cnt=var;
    auto check=[&](int mid){
        vector<int> cur;
        for(auto i:vec){
            if(in[i]) continue;
            movein(i);
            in[i]=true;
            cur.push_back(i);
            cnt++;
            if(press_button()>mid){
                in[i]=false;
                moveout(i);
                cur.pop_back();
                cnt--;
            }
            if(cnt==mid*var) break;
        }
        if(cnt==mid*var){
            return true;
        }
        else{
            for(auto i:cur){
                if(in[i]){
                    moveout(i);
                    in[i]=false;
                    cnt--;
                }
            }
            swap(cur,vec);
            return false;
        }
    };
    int l=1,r=n/var;
    while(l<r){
        int mid=(l+r+1)/2;
        if(check(mid)){
            l=mid;
        }
        else{
            r=mid-1;
        }
    }   
    return l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...