Submission #1288616

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

void buy_souvenirs(int N, long long P0) 
{
    pair<vector<int>, long long> res;
    vector<long long> v;

    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);
        P[0] = P0;
        set<int> found;

        res = transaction(P0 - 1);
        for (int id : res.first)
            found.insert(id);

        for (int i = 1; i < N; i++)
        {
            long long base = P[i - 1];
            long long next = -1;
            pair<vector<int>, long long> res2;

            for (long long d = -2; d <= 2; d++)
            {
                long long price = base + d;
                if (price < 1) continue;

                res2 = transaction(price - 1);

                for (int id : res2.first)
                {
                    if (!found.count(id))
                    {
                        found.insert(id);
                        next = price;
                        break;
                    }
                }

                if (next != -1) break;
            }

            if (next == -1)
                next = base;

            P[i] = next;
        }
        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...