Submission #1190392

#TimeUsernameProblemLanguageResultExecution timeMemory
1190392LudisseyRarest Insects (IOI22_insects)C++17
0 / 100
34 ms556 KiB
#include "insects.h"
#include <bits/stdc++.h>
#define sz(a) (int)a.size()
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
using namespace std;

set<int> in;
set<int> out;
int tps=0;
int n;
vector<int> re;
int press() { return press_button(); }

int countType(vector<int> *to_in){
    for (auto u : *to_in)
    {
        in.insert(u);
        move_inside(re[u]);
        int ans=press();
        if(ans>1) {
            move_outside(re[u]);
            out.insert(u);
            in.erase(u);
        }
    }
    return sz(in);
}


int min_cardinality(int N) {
    n=N;
    vector<int> al(N);
    for (int i = 0; i < N; i++) al[i]=i;
    re=al;
    random_device rd;
    mt19937 g(rd());
    //shuffle(all(re),g);
    tps=countType(&al);
    int l=1,r=n/tps;
    int ans=1;
    set<int> lst=in;
    while(l<=r){
        int mid=(l+r)/2;
        queue<int> to_add;
        queue<int> to_erase;
        for (auto u : out)
        {
            move_inside(re[u]);
            in.insert(u);
            if(press()>mid) { in.erase(u); move_outside(re[u]); }
            else to_add.push(u);
            if(sz(in)==tps*mid) break;
        }
        while(!to_add.empty())
        {
            int u=to_add.front(); to_add.pop();
            out.erase(u);
        }
        if(sz(in)==tps*mid) {
            l=mid+1;
            lst=in;
            ans=mid;
        }else{
            r=mid-1;
            for (auto u : in) {
                if(lst.find(u)==lst.end())  to_erase.push(u);
            }
            while(!to_erase.empty())
            {
                int u=to_erase.front(); to_erase.pop();
                out.erase(u);
                move_outside(re[u]);
            }
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...