Submission #1252512

#TimeUsernameProblemLanguageResultExecution timeMemory
1252512SamAndSouvenirs (IOI25_souvenirs)C++20
100 / 100
12 ms428 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;
#define m_p make_pair
#define all(x) (x).begin(),(x).end()
#define sz(x) ((int)(x).size())
#define fi first
#define se second
typedef long long ll;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
mt19937 rnf(2106);
const int N = 102;

int n;
ll p[N];
int q[N];

void rec(vector<int> v, ll s)
{
    while (1)
    {
        assert(!p[v[0]]);
        while (p[v.back()])
        {
            s -= p[v.back()];
            v.pop_back();
        }
        if (sz(v) == 1)
        {
            if (p[v[0] + 1])
            {
                p[v[0]] = s;
                return;
            }
            ll t = s - 1;
            auto u = transaction(t);
            ll ss = t - u.se;
            vector<int> vv = u.fi;
            for (int i = 0; i < sz(vv); ++i)
                ++q[vv[i]];
            rec(vv, ss);
        }
        else
        {
            ll t = s / sz(v);
            if (s % sz(v) == 0)
                --t;
            auto u = transaction(t);
            ll ss = t - u.se;
            vector<int> vv = u.fi;
            for (int i = 0; i < sz(vv); ++i)
                ++q[vv[i]];
            rec(vv, ss);
        }
    }
}

void buy_souvenirs(int N, long long P0)
{
    n = N;
    p[n] = -1;
    rec(vector<int>{0}, P0);
    for (int i = 0; i < n; ++i)
    {
        assert(p[i]);
        while (q[i] < i)
        {
            transaction(p[i]);
            ++q[i];
        }
    }
    return;
}

/*
7
342 88 55 7 6 5 4
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...