#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;
void buy_souvenirs(int N, long long P0) {
    vector<vector<int>> vis(N, vector<int>(N, 0));
    vector<long long> p(N);
    vector<int> cnt(N);
    p[0] = P0;
    vis[0][0] = 1;
    for (int i = N - 1; i > 0; i--) {
        while(!p[i]) {
            int j = i;
            while(!p[j]) j--;
            int c = 0;
            for (int k = 0; k < N; k++) c += (vis[j][k] == 1);
            long long val = (p[j] - 1) / c;
            vector<int> vec;
            long long rem;
            vector<int> v(N, 0);
            tie(vec, rem) = transaction(val);
            for (int x : vec) {
                cnt[x]++;
                v[x] = 1;
            }
//            cout << i << ' ' << val << endl;
            val -= rem;
//            for (int k = 0; k < N; k++) {
//                cout << v[k] << ' ';
//            } cout << endl;
            for (int k = i + 1; k < N; k++) {
                if (v[k]) {
                    v[k] = 0;
                    val -= p[k];
                }
            }
//            for (int k = 0; k < N; k++) {
//                cout << v[k] << ' ';
//            } cout << endl;
            int k = 0;
            while(!v[k]) k++;
            vis[k] = v;
            p[k] = val;
        }
        for (int j = 0; j < i; j++) {
            if (vis[j][i] && p[j]) {
                p[j] -= p[i];
                vis[j][i] = 0;
            }
        }
//        cout << i << ": " << p[i] << endl;
    }
    for (int i = 0; i < N; i++) {
        for (int j = cnt[i]; j < i; j++) {
            transaction(p[i]);
        }
    }
    return;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |