Submission #731478

#TimeUsernameProblemLanguageResultExecution timeMemory
731478alextodoranRarest Insects (IOI22_insects)C++17
82.60 / 100
127 ms300 KiB
/**
 _  _   __  _ _ _  _  _ _
 |a  ||t  ||o    d | |o  |
| __    _| | _ | __|  _ |
| __ |/_  | __  /__\ / _\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int E_MAX = 11;

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

int min_cardinality (int N) {
    bool in[N];
    fill(in, in + N, false);
    int dist = 0;
    for (int i = 0; i < N; i++) {
        move_inside(i);
        if (press_button() > 1) {
            move_outside(i);
        } else {
            dist++;
            in[i] = true;
        }
    }
    if (dist == N) {
        return 1;
    }
    int cnt = dist;
    int l = 1, r = N / dist;
    while (l < r) {
        int k = (l * 3 + r + 3) / 4;
        vector <int> v;
        for (int i = 0; i < N; i++) {
            int suff = 0;
            for (int j = i; j < N; j++) {
                if (in[j] == false) {
                    suff++;
                }
            }
            if (cnt + suff < dist * k) {
                break;
            }
            if (in[i] == false) {
                move_inside(i);
                if (press_button() > k) {
                    move_outside(i);
                } else {
                    in[i] = true;
                    v.push_back(i);
                    cnt++;
                }
            }
        }
        if (cnt == dist * k) {
            l = k;
        } else {
            r = k - 1;
            for (int i : v) {
                move_outside(i);
                in[i] = false;
                cnt--;
            }
        }
    }
    return l;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...