Submission #1364395

#TimeUsernameProblemLanguageResultExecution timeMemory
1364395activedeltorreSouvenirs (IOI25_souvenirs)C++20
100 / 100
8 ms348 KiB
#include "souvenirs.h"
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <utility>
#include <vector>
#include <utility>
#include <vector>
#include <iostream>
using namespace std;
vector<int>trans[105];
long long val[105];
long long number[105];
std::pair<std::vector<int>, long long> transaction(long long M);
long long suffix;
long long cnt[105];
void solve(long long valmax)
{
    std::pair<std::vector<int>, long long>rez=transaction(valmax);
    valmax-=rez.second;
    int curr=rez.first[0];
    for(auto it:rez.first)
    {
        trans[curr].push_back(it);
        cnt[it]++;
    }
    while(trans[curr].back()>=suffix)
    {
        valmax-=number[trans[curr].back()];
        trans[curr].pop_back();
    }
    while(suffix>curr+1)
    {
        int cate=trans[curr].size();
        long long nxtval=(valmax+cate-1)/cate-1;
        solve(nxtval);
        while(suffix<=trans[curr].back())
        {
            valmax-=number[trans[curr].back()];
            trans[curr].pop_back();
        }
    }
    number[curr]=valmax;
    suffix--;
}
void buy_souvenirs(int N, long long P0)
{
    int n=N;
    suffix=n;
    solve(P0-1);
    for(int i=1;i<n;i++)
    {
        while(cnt[i]<i)
        {
            transaction(number[i]);
            cnt[i]++;
        }
        //cout<<number[i]<<" ";
    }
    //cout<<'\n';
    return;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...