Submission #1260263

#TimeUsernameProblemLanguageResultExecution timeMemory
1260263truongdz_top12Souvenirs (IOI25_souvenirs)C++20
100 / 100
12 ms424 KiB
#include "souvenirs.h"
#include<bits/stdc++.h>
using namespace std;
int N,Q[1111];
long long P[1111];
void ask(int N,long long M)
{
    pair<vector<int>,long long>buy=transaction(M);
    for(auto&i:buy.first)
        ++Q[i];
    auto previous=buy;
    while(true)
    {
        buy=previous;
        while(!buy.first.empty()&&P[buy.first.back()])
        {
            buy.second+=P[buy.first.back()];
            buy.first.pop_back();
        }
        if(buy.first.size()==1&&(buy.first[0]==N-1||P[buy.first[0]+1]))
        {
            P[buy.first[0]]+=M-buy.second;
            break;
        }
        if(buy.first.size()==1)
            ask(N,M-buy.second-1);
        else
            ask(N,(M-buy.second)/buy.first.size());
    }
}
void buy_souvenirs(int N,long long P0)
{
    P[0]=P0;
    ask(N,P0-1);
    for(int i=0;i<N;++i)
    {
        while(Q[i]<i)
        {
            transaction(P[i]);
            ++Q[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...