제출 #672102

#제출 시각아이디문제언어결과실행 시간메모리
672102tbzardRarest Insects (IOI22_insects)C++17
10 / 100
352 ms536 KiB
#include <bits/stdc++.h>
using namespace std;
void move_inside(int i);
void move_outside(int i);
int press_button();

bool vis[2222];
bool check[2222];
int min_cardinality(int n){
    vector<int> v;
    for(int i=0;i<n;i++){
        move_inside(i);
        int r = press_button();
        if(r == 2) move_outside(i);
        else{
            v.push_back(i);
            vis[i] = 1;
        }
    }

    int ans = n/(int)v.size();
    int lo = 1, hi = ans-1;
    while(lo <= hi){
        memset(check, 0, sizeof(check));
        int mid = (lo+hi)/2;

        vector<int> add;
        for(int i=0;i<n;i++){
            if(vis[i]) continue;

            move_inside(i);
            int r = press_button();
            if(r > mid){
                int idx = 0;
                for(int i=0;i<(int)v.size();i++){
                    move_outside(v[i]);
                    int r = press_button();
                    if(r == mid){
                        idx = i;
                        break;
                    }
                }
                for(int i=0;i<=idx;i++){
                    move_inside(v[i]);
                }
               
                move_outside(i);
                check[idx] = 1;
            }
            else add.push_back(i);
        }
        for(int i=0;i<(int)add.size();i++){
            move_outside(add[i]);
        }

        bool ok = 0;
        for(int i=0;i<(int)v.size();i++){
            if(!check[i]){
                ok = 1;
                break;
            }
        }
        if(ok) ans = mid, hi = mid-1;
        else lo = mid+1;
    }

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