Submission #1250055

#TimeUsernameProblemLanguageResultExecution timeMemory
1250055tranvinhhuy2010Souvenirs (IOI25_souvenirs)C++20
25 / 100
12 ms412 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

ll n, cnt[105], p[105];

ll adu_calculate(ll s, ll k) {
    s += k*(k-1)/2;
    return s/k;
}

void adu_build(ll money) {
    auto [a, remain] = transaction(money);
    ll k = a.size();
    ll sum = money - remain;
    if (k==0) return;

    for (ll i : a)
        cnt[i]++;

    if (k==1) {
        p[a[0]] = sum;
        if (a[0]<n-1 && p[a[0]+1]==0) adu_build(sum-1);
    }
    else {
        ll x = adu_calculate(sum, k);
        if (p[a[0]+1]==0) adu_build(x-1);

        while (a.size()>1) {
            sum -= a.back();
            a.pop_back();
        }

        p[a[0]] = sum;
    }
}

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

void buy_souvenirs(int N, ll P0) {
    n = N;
    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...