Submission #1251782

#TimeUsernameProblemLanguageResultExecution timeMemory
1251782tranvinhhuy2010Souvenirs (IOI25_souvenirs)C++20
4 / 100
12 ms408 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int n, cnt[105] = {};
ll p[105] = {};
bool known[105] = {};

void adu_build(ll money) {
    auto [v, remain] = transaction(money);
    ll sum = money - remain;

    for (int i : v)
        cnt[i]++;

    while (v.size()>1) {
        while (p[v.back()]>0 && v.size()>1) {
            sum -= p[v.back()];
            v.pop_back();
        }

        if (known[v[0]+1]) break;
        adu_build((sum-1)/v.size());
    }

    p[v[0]] = sum;
    known[v[0]] = true;
}

void adu_complete() {
    for (int i=1; i<n; i++) {
        while (cnt[i]<i) {
            transaction(p[i]);
            cnt[i]++;
        }
    }
}

void buy_souvenirs(int N, ll P0) {
    n = N;
    p[0] = P0;
    known[n] = true;
    adu_build(P0-1);
    adu_complete();
}
#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...