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