제출 #886567

#제출 시각아이디문제언어결과실행 시간메모리
886567thinknoexit드문 곤충 (IOI22_insects)C++17
99.95 / 100
31 ms1104 KiB
#include <bits/stdc++.h>
#include "insects.h"
using namespace std;
using ll = long long;
int n;
int sz = 0;
bool mark[2020];
void putin(int x) {
    move_inside(x);
    sz++;
}
void putout(int x) {
    move_outside(x);
    sz--;
}
int val() {
    return press_button();
}
int min_cardinality(int N) {
    n = N;
    putin(0);
    mark[0] = 1;
    for (int i = 1;i < n;i++) {
        putin(i);
        if (val() == 2) {
            putout(i);
        }
        else {
            mark[i] = 1;
        }
    }
    int type = sz;
    if (type == n) return 1;
    int l = 1, r = n / sz;
    while (l < r) {
        int mid = (l + r + 1) / 2;
        stack<int> st, st2;
        for (int i = 0;i < n;i++) {
            if (sz == type * mid) break;
            if (mark[i]) continue;
            putin(i);
            if (val() > mid) {
                putout(i);
                mark[i] = 1;
                st2.push(i);
            }
            else {
                st.push(i);
            }
        }
        if (sz == type * mid) {
            while (!st.empty()) {
                mark[st.top()] ^= 1;
                st.pop();
            }
            while (!st2.empty()) {
                mark[st2.top()] ^= 1;
                st2.pop();
            }
            l = mid;
        }
        else {
            while (!st.empty()) {
                putout(st.top());
                st.pop();
            }
            r = mid - 1;
        }
    }
    return l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...