Submission #686459

#TimeUsernameProblemLanguageResultExecution timeMemory
68645979brueRarest Insects (IOI22_insects)C++17
99.89 / 100
58 ms416 KiB
#include "insects.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n, k, cnt;
vector<int> vec;
bool isFirst[2002], inside[2002];
bool dontSee[2002];

int min_cardinality(int N){
    n = N;

    /// 종류 알아내기
    for(int i=0; i<n; i++){
        move_inside(i);
        if(press_button() == 2) move_outside(i);
        else vec.push_back(i), isFirst[i] = 1, inside[i] = 1;
    }
    k = cnt = (int)vec.size();

    int l = 2, r = N/k, ans = 1;
    while(l<=r){
        int m = (l+r)/2 + min((r-l)/150, 10);
        vector<int> setIn, setOut;
        for(int i=0; i<n; i++){
            if(inside[i] || dontSee[i]) continue;
            move_inside(i);
            if(press_button() <= m) setIn.push_back(i);
            else move_outside(i), setOut.push_back(i);
        }
        cnt += (int)setIn.size();
        if(cnt == k * m){
            ans = m, l = m+1;
            for(int x: setIn) dontSee[x] = 1;
        }
        else{
            r = m-1, cnt -= (int)setIn.size();
            for(int x: setIn) move_outside(x);
            for(int x: setOut) dontSee[x] = 1;
        }
    }
    return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...