#include "souvenirs.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int lim = 105;
int n, cnt[lim];
ll P[lim];
void MyLinh(ll money){
	vector<int>item;
	ll remain;
	tie(item, remain) = transaction(money);
	for(int& i : item){
		cnt[i]++;
	}
	while(item.size() > 1){
		if(P[item.back()] != -1){
			remain += P[item.back()];
			item.pop_back();
		}
		else{
			MyLinh((money - remain) / item.size());
		}
	}
	P[item[0]] = money - remain;
	if(item[0] != n - 1 && P[item[0] + 1] == -1){
		MyLinh(P[item[0]] - 1);
	}
}
void buy_souvenirs(int N, ll p0){
	if((n = N) == 2){
		transaction(p0 - 1);
		return;
	}
	if(n == 3){
		vector<int>item;
		ll remain;
		tie(item, remain) = transaction(p0 - 1);
		if(item.size() == 1){
			transaction(p0 - remain - 2);
		}
		return;
	}
	memset(cnt, 0, sizeof(cnt));
	memset(P, -1, sizeof(P));
	MyLinh((P[0] = p0) - 1);
	for(int i = 1; i < n; i++){
		for(int j = i; j > cnt[i]; j--){
			transaction(P[i]);
		}
	}
}
| # | 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... |