Submission #1281254

#TimeUsernameProblemLanguageResultExecution timeMemory
1281254FaggiRarest Insects (IOI22_insects)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define ll long long
#define sz(x) int(x.size())
#define forn(i, n) for (i = 0; i < n; i++)
#define all(x) x.begin(), x.end()
#define pb push_back
#define mp make_pair
#define fr first
#define se second
using namespace std;

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

vector<bool> vis, en;
map<vector<bool>, ll> memo;
ll n;


void mi(ll x) { en[x] = 1; }
void mo(ll x) { en[x] = 0; }


ll pBtn()
{

    auto it = memo.find(en);
    if (it != memo.end())
        return it->second;

    for (ll i = 0; i < sz(en); i++)
    {
        if (vis[i] != en[i])
        {
            if (en[i])
                move_inside(i);
            else
                move_outside(i);
            vis[i] = en[i];
        }
    }

    ll x = press_button();
    memo[vis] = x;
    return x;
}

int min_cardinality(int N)
{
    n = N;
    vis.assign(N, 0);
    en.assign(N, 0);

    vector<ll> in, out, ins;
    forn(i, n) ins.pb(i);


    mi(0);
    in.pb(0);
    ll inside = 1; 

    for (auto k : ins)
    {
        if (k == 0) continue;
        mi(k);
        if (pBtn() > 1)
        {
            mo(k);
            out.pb(k);
        }
        else
        {
            in.pb(k);
            inside++;
        }
    }

    ll distinct = inside;
    ins = out;

    ll l = 1, r = n / distinct; 
    ll ans = 1;

    while (l <= r)
    {
        ll mid = (l + r) / 2;
        vector<ll> in2, out2;
        ll added = 0; 

        for (auto k : ins)
        {
            mi(k);
            if (pBtn() > mid)
            {
                mo(k);
                out2.pb(k);
            }
            else
            {
                in2.pb(k);
                added++;
            }
        }

        if (added + distinct * (mid - 1) == mid * distinct)
        {
            ans = mid;
            l = mid + 1;
            ins = out2;
        }
        else
        {
            for (auto k : in2)
                mo(k);
            r = mid - 1;
            ins = in2;
        }
    }

    return int(ans);
}

Compilation message (stderr)

insects.cpp: In function 'int min_cardinality(int)':
insects.cpp:56:10: error: 'i' was not declared in this scope; did you mean 'in'?
   56 |     forn(i, n) ins.pb(i);
      |          ^
insects.cpp:4:25: note: in definition of macro 'forn'
    4 | #define forn(i, n) for (i = 0; i < n; i++)
      |                         ^