제출 #1338064

#제출 시각아이디문제언어결과실행 시간메모리
133806412345678선물 (IOI25_souvenirs)C++20
25 / 100
13 ms344 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>

using namespace std;

#define ll long long

const int nx=1e2+5;

ll p[nx];
int cnt[nx];
vector<int> item[nx];
ll spend[nx];

void reeval(int idx)
{
    vector<int> newitem;
    for (auto i:item[idx])
    {
        if (p[i]) spend[idx]-=p[i];
        else newitem.push_back(i);
    }
    item[idx]=newitem;
}

void buy(ll x) // return lead
{
    auto [it, lft]=transaction(x);
    int f=it[0];
    spend[f]=x-lft;
    item[f]=it;
    for (auto u:it) cnt[u]++;
    reeval(f);
}

void trybuy(int idx)
{
    int p=idx;
    while (item[p].empty()) p--;
    ll newval=0;
    if (item[p].size()==1) newval=spend[p]-1;
    else newval=spend[p]/item[p].size();
    buy(newval);
}

void buy_souvenirs(int N, long long P0) {
    p[0]=P0;
    buy(P0-1);
    for (int i=N-1; i>=1; i--) 
    {
        while (item[i].empty()) trybuy(i);
        p[i]=spend[i];
    }
    for (int i=0; i<N; i++) while (cnt[i]<i) transaction(p[i]), cnt[i]++;
}
#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...