Submission #826157

#TimeUsernameProblemLanguageResultExecution timeMemory
826157LittleCubeRarest Insects (IOI22_insects)C++17
39.06 / 100
271 ms436 KiB
#include "insects.h"
#include <bits/stdc++.h>
#define ll long long
using namespace std;

const double r = 0.45;

int min_cardinality(int N)
{
    vector<int> remain;
    int M = N, L = 1, R = N;
    /*
    Choose k:
    ans <= k -> R = k
    ans > k -> L = k + 1, M -= k
    */
    for (int i = 0; i < N; i++)
        remain.emplace_back(i);
    while (L < R)
    {
        int k = L * (1.0 - r) + R * r;
        vector<int> small, large, tmp, out;

        for (int i : remain)
        {
            move_inside(i);
            if (press_button() > k)
            {
                move_outside(i);
                large.emplace_back(i);
            }
            else
                small.emplace_back(i);
        }
        for (auto i : small)
            move_outside(i);

        if (large.empty())
            R = k;
        else
        {
            for (auto i : large)
            {
                move_inside(i);
                if (press_button() == 2)
                    move_outside(i);
                else
                    out.emplace_back(i);
            }
            int g = out.size();
            for (auto i : small)
            {
                move_inside(i);
                if (press_button() == 2)
                    large.emplace_back(i);
                else
                    tmp.emplace_back(i);
                move_outside(i);
            }
            for (auto i : out)
                move_outside(i);

            if (tmp.empty())
            {
                if (g == 1)
                    return large.size();
                L = k + 1, R = min(R, (int)remain.size() / g);
            }
            else
                remain = tmp, R = k;
        }
    }
    return L;
}

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:11:9: warning: unused variable 'M' [-Wunused-variable]
   11 |     int M = N, L = 1, R = N;
      |         ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...