Submission #1232426

#TimeUsernameProblemLanguageResultExecution timeMemory
1232426clemmy14Rarest Insects (IOI22_insects)C++20
0 / 100
2 ms420 KiB
#include<bits/stdc++.h>
#include "insects.h"
using namespace std;

int n, t, sofarl;
bool up=true;
set<int> dontUse;
vector<int> machine;

bool check(int k) {
    //cout << k << endl;
    if(up) {
        for(auto x : machine) dontUse.insert(x);
    } else {
        set<int> used;
        for(auto x : machine) used.insert(x);
        for(int i=0; i<n; i++) if(!used.count(i)) dontUse.insert(i);
        
        int mm=machine.size();
        for(int i=sofarl*t; i<mm; i++) move_outside(i);
        for(int i=sofarl*t; i<mm; i++) machine.pop_back();
    }
    for(int i=0; i<n; i++) if(!dontUse.count(i)) {
        machine.push_back(i);
        move_inside(i);
        if(press_button() > k) {
            machine.pop_back();
            move_outside(i);
        } 
    }
    // for(auto x : machine) cout << x << ' ';
    // cout << endl;
    // cout << (machine.size() == k*t ? "Yup" : "No") << endl; 
    return machine.size() == k*t;
}

int lastTrue(int lo, int hi) {
    lo--;
    while(lo < hi) {
        sofarl=lo;
        int mid = lo+(hi-lo+1)/2;
        if(check(mid)){
            lo=mid; 
            up=true;
        } else {
            hi=mid-1;
            up=false;
        }
    }
    return lo;
}

int min_cardinality(int N) {
    n=N;
    for(int i=0; i<N; i++) {
        machine.push_back(i);
        move_inside(i);
        if(press_button() == 1) continue;
        machine.pop_back();
        move_outside(i);
    }
    t=machine.size();
    return lastTrue(1, (N/t));
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...