#include "souvenirs.h"
#include <utility>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
void buy_souvenirs(int n, long long P0) {
long long val[n];
fill(val,val+n,-1);
val[0]=P0;
set<int>dep[n];
long long sum[n];
int cnt[n];
fill(cnt,cnt+n,0);
while(1){
int temp = 0;
for(int i = 0;i<n;i++){
if(val[i]==-1){
temp++;
}
}
if(temp==0){
break;
}
bool req = 0;
for(int i = n-1;i>=0;i--){
if(val[i]==-1&&dep[i].size()==0){
req=1;
}
if(val[i]!=-1&&req){
req=0;
pair<vector<int>,long long>p = transaction(val[i]-1);
for(int i : p.first){
cnt[i]++;
}
long long sm = val[i]-1-p.second;
set<int>s;
for(int i : p.first){
s.insert(i);
}
for(int i : p.first){
if(val[i]!=-1){
sm-=val[i];
s.erase(i);
}
}
dep[i+1]=s;
sum[i+1]=sm;
break;
}
if(dep[i].size()==1){
dep[i].clear();
val[i]=sum[i];
break;
}
if(dep[i].size()){
set<int>er;
for(int x : dep[i]){
if(val[x]!=-1){
sum[i]-=val[x];
er.insert(x);
}
}
for(int x : er){
dep[i].erase(x);
}
if(dep[i].size()==1){
dep[i].clear();
val[i]=sum[i];
break;
}
pair<vector<int>,long long>p = transaction(sum[i]/dep[i].size());
for(int i : p.first){
cnt[i]++;
}
long long sm = sum[i]/dep[i].size()-p.second;
set<int>s;
for(int i : p.first){
s.insert(i);
}
for(int i : p.first){
if(val[i]!=-1){
sm-=val[i];
s.erase(i);
}
}
dep[*s.begin()]=s;
sum[*s.begin()]=sm;
break;
}
}
}
for(int i = 0;i<n;i++){
while(cnt[i]<i){
transaction(val[i]);
cnt[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... |