제출 #1342086

#제출 시각아이디문제언어결과실행 시간메모리
1342086aritro_선물 (IOI25_souvenirs)C++20
100 / 100
13 ms412 KiB
#include "bits/stdc++.h"
#include "souvenirs.h"
using namespace std;

typedef long long ll;
#define endl '\n'
#define pb push_back
#define ff first
#define ss second
#define all(a) a.begin(),a.end()

const int maxN=105;
bool vis[maxN];
int cnt[maxN], n;
ll p[maxN];

pair<vector<int>,ll> transaction(ll m);

void price(ll M){
    auto P=transaction(M);
    vector<int> v=P.ff;
    ll sum=M-P.ss;
    for(auto it=v.begin();it!=v.end();it++) cnt[*it]++;
    while(v.size()>1){
        if(vis[v.back()]){
            sum-=p[v.back()];
            v.pop_back();
            continue;
        }
        price(sum/v.size());
    }
    vis[v[0]]=1,p[v[0]]=sum;
    for(int i=v[0]+1;i<n;i++) if(!vis[i]) price(p[i-1]-1);
}

void buy_souvenirs(int N, ll p0){
    n=N;
    vis[0]=1, p[0]=p0;
    price(p0-1);
    for(int i=0;i<n;i++){
        while(cnt[i]<i){
            transaction(p[i]);
            cnt[i]++;
        }
    }
    return;
}
#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...