제출 #1223021

#제출 시각아이디문제언어결과실행 시간메모리
1223021jakobrs드문 곤충 (IOI22_insects)C++20
80.04 / 100
31 ms512 KiB
#include <algorithm>
#include <numeric>
#include <iostream>
#include <set>
#include <vector>

void move_inside(int i);
void move_outside(int i);
int press_button();

int min_cardinality(int N) {
    std::set<int> included{};
    std::vector<int> used{};

    for (int i = 0; i < N; i++)
        used.push_back(i);

    auto eval = [&](int m) -> int {
        for (int x : used) {
            if (included.contains(x))
                continue;
            move_inside(x);
            if (press_button() > m)
                move_outside(x);
            else
                included.insert(x);
        }
        return included.size();
    };

    auto k = eval(1);
    for (auto x : included)
        move_outside(x);
    included.clear();

    int l = 1;
    int r = N/k + 1;
    bool filled = false;

    while (r - l > 1) {
        auto m = (r - l) > 10 ? (l + 3 * (r - l) / 5) : ((l + r) / 2);

        if (filled) {
            used.clear();
            for (auto x : included) {
                used.push_back(x);
                move_outside(x);
            }
            included.clear();
        }

        if (eval(m) == k * m) {
            l = m;
            filled = false;
        } else {
            r = m;
            filled = true;
        }
    }

    return l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...