Submission #1288620

#TimeUsernameProblemLanguageResultExecution timeMemory
1288620alexrana2626Souvenirs (IOI25_souvenirs)C++20
25 / 100
13 ms400 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;

void buy_souvenirs(int N, long long P0) 
{
    pair<vector<int>, long long> res;
    
    if (N == 2)
    {
        transaction(P0 - 1);
        return;
    }

    if (N == 3)
    {
        res = transaction(P0 - 1);
        long long x = res.second;
        if (res.first.size() == 2)
        {
            transaction((P0 - x - 1) / 2);
            return;
        }
        else
        {
            long long P1 = P0 - x - 1;
            transaction(P1 - 1);
            transaction(P1 - 1);
            return;
        }
    }

    if (P0 == N)
    {
        for (int i = 0; i < N; i++)
        {
            int j = i;
            while (j--)
            {
                transaction(N - i);
            }
        }
        return;
    }

    vector<long long> P(N, 0);
    P[0] = P0;
    vector<int> cnt(N, 0);
    cnt[0] = INT_MAX;
    set<int> s;

    for (int i = 1; i < N; i++)
    {
        long long x = P[i-1] - 1;
        int n = i - cnt[i];

        while (cnt[i] < i)
        {
            res = transaction(x);
            for (int id : res.first)
            {
                if (cnt[id] < id)
                    cnt[id]++;
            }

            if (cnt[i] < i)
            {
                x = P[i-1] - 2;
            }
        }
        P[i] = x;
    }
    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...