Submission #1306382

#TimeUsernameProblemLanguageResultExecution timeMemory
1306382FaggiPrisoner Challenge (IOI22_prison)C++20
100 / 100
7 ms7224 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;

vector<vector<int>> v;
ll n;

void calc(ll l, ll r, ll tip, ll sig, ll act, ll la, ll ra)
{
    if (l > r)
        return;
    v[act][0] = tip;
    ll i;
    for (i = r; i <= ra; i++)
        v[act][i] = -((!tip) + 1);
    for (i = l; i >= la; i--)
        v[act][i] = -(tip + 1);
    l++;
    r--;
    if (act <= 12)
    {
        ll mid = ((r - l + 1) + 2) / 3;
        for (i = l; i <= l + mid - 1; i++)
            v[act][i] = sig + 1;
        for (i = l + mid; i <= l + mid * 2 - 1; i++)
            v[act][i] = sig + 2;
        for (i = l + mid * 2; i <= r; i++)
            v[act][i] = sig + 3;
        calc(l, l + mid - 1, !tip, sig + 3, sig + 1, l - 1, r + 1);
        calc(l + mid, l + mid * 2 - 1, !tip, sig + 3, sig + 2, l - 1, r + 1);
        calc(l + mid * 2, r, !tip, sig + 3, sig + 3, l - 1, r + 1);
    }
    else
    {
        if (l > r)
            return;

        if (r - l + 1 <= 2)
        {
            for (i = l; i <= r; i++)
                v[act][i] = sig + 1;
            calc(l, r, !tip, sig + 2, sig + 1, l - 1, r + 1);
        }
        else
        {
            ll mid = ((r - l + 1) + 1) / 2;
            for (i = l; i <= l + mid - 1; i++)
                v[act][i] = sig + 1;
            for (i = l + mid; i <= r; i++)
                v[act][i] = sig + 2;
            calc(l, l + mid - 1, !tip, sig + 2, sig + 1, l - 1, r + 1);
            calc(l + mid, r, !tip, sig + 2, sig + 2, l - 1, r + 1);
        }
    }
}

std::vector<std::vector<int>> devise_strategy(int N)
{
    v.resize(21, vector<int>(N + 1, 0));
    n = N;

    calc(1, N, 0, 0, 0, 1, N);

    return {v};
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...