Submission #1269291

#TimeUsernameProblemLanguageResultExecution timeMemory
1269291sula2Souvenirs (IOI25_souvenirs)C++20
53 / 100
12 ms408 KiB
#include <bits/stdc++.h>
#include "souvenirs.h"
using namespace std;

void buy_souvenirs(int N, long long P0) {
    long long P[N] = {}, Q[N] = {};
    P[0] = P0;
    vector<int> S[N];
    long long q = P0 - 1;
    while (true) {
        auto [a, b] = transaction(q);
        auto sum = q - b;
        S[a[0]] = a;
        P[a[0]] = sum;
        q = a.size() == 1 ? sum - 1 : sum/a.size();
        for (int i : a) Q[i]++;
        if (a[0] == N-1) break;
    }
    for (int i = N-1; i > 0; i--) {
        if (S[i].empty()) {
            tie(S[i], P[i]) = transaction(2*P[i+1]);
            P[i] = 2*P[i+1] - P[i];
            for (int j : S[i]) Q[j]++;
        }
        for (int j : S[i])
            if (i < j)
                P[i] -= P[j];
    }
    for (int i = 1; i < N; i++) {
        while (Q[i] < i) {
            transaction(P[i]);
            Q[i]++;
        }
    }
}
#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...