제출 #1025084

#제출 시각아이디문제언어결과실행 시간메모리
1025084vjudge1드문 곤충 (IOI22_insects)C++17
99.76 / 100
43 ms856 KiB
#include "insects.h"
#include <bits/stdc++.h>

#define ll long long
#define sz(s) (int)s.size()
#define pb push_back
#define in insert
#define lb lower_bound
#define ub upper_bound

using namespace std;

const int MAX=2e5+10;

int n;
set<int> a;
set<int> b;
set<int> st;

bool check(int m){
    // for(int x:a)st.in(x);
    vector<int> vec;
    vector<int> vec1;
    for(int i:b){
        move_inside(i);
        if(press_button()>m){
            move_outside(i);
            vec1.pb(i);
        }
        else{
            st.in(i);
            vec.pb(i);
        }
    }
    if(sz(st)<m*sz(a)){
        for(int x:vec){
            move_outside(x);
            st.erase(x);
            // b.erase(x);
        }
        for(int x:vec1)b.erase(x);
    }
    else{
        for(int x:st)b.erase(x);
    }
    // cout<<m<<" "<<sz(st)<<" "<<m*sz(a)<<"\n";
    // 0 33
    // 1 41
    // 2 40
    // 3 41
    // 4 45
    return (sz(st)==m*sz(a));
}

int min_cardinality(int N){
    n=N;
    for(int i=0;i<N;i++){
        move_inside(i);
        if(press_button()==2){
            b.in(i);
            move_outside(i);
        }
        else{
            st.in(i);
            a.in(i);
        }
    }
    int l=1,r=N/sz(a),res=1;
    while(l<=r){
        int m=(l+r)/2;
        if(check(m)){
            l=m+1;
            res=m;
        }
        else r=m-1;
    }
    return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...