Submission #942194

#TimeUsernameProblemLanguageResultExecution timeMemory
942194benjaminkleyn드문 곤충 (IOI22_insects)C++17
100 / 100
27 ms1104 KiB
#include <bits/stdc++.h>
#include "insects.h"
using namespace std;

int cnt;
bool inside[2000];
bool bad[2000];

void init()
{
    cnt = 0;
    memset(inside, false, sizeof(inside));
    memset(bad, false, sizeof(bad));
}
void move_in(int i)
{
    if (inside[i])
        return;
    cnt++;
    inside[i] = true;
    move_inside(i);
}
void move_out(int i)
{
    if (!inside[i])
        return;
    cnt--;
    inside[i] = false;
    move_outside(i);
}

int min_cardinality(int N) 
{
    init();
    for (int i = 0; i < N; i++)
    {
        move_in(i);
        if (press_button() > 1)
            move_out(i);
    }
    int num_types = cnt;

    if (num_types == 1)
        return N;
    if (num_types == N)
        return 1;

    mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
    vector<int> p(N);
    iota(p.begin(), p.end(), 0);

    int lo = 1, hi = N / cnt, mid, ans;
    while (lo <= hi)
    {
        mid = (lo + hi) / 2;

        shuffle(p.begin(), p.end(), rng);

        vector<int> new_insects;
        vector<int> bad_insects;
        for (int idx = 0; idx < N; idx++)
        {
            int i = p[idx];
            if (!(bad[i] || inside[i]))
            {
                move_in(i);

                if (press_button() > mid)
                {
                    bad_insects.push_back(i);
                    move_out(i);
                }
                else
                    new_insects.push_back(i);

                if (cnt >= mid * num_types)
                    break;
            }
        }

        if (cnt == mid * num_types)
            ans = mid, lo = mid + 1;
        else
        {
            for (int i : bad_insects)
                bad[i] = true;
            for (int i : new_insects)
                move_out(i);
            hi = mid - 1;
        }
    }
    return ans;
}

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:52:36: warning: 'ans' may be used uninitialized in this function [-Wmaybe-uninitialized]
   52 |     int lo = 1, hi = N / cnt, mid, ans;
      |                                    ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...