Submission #1257470

#TimeUsernameProblemLanguageResultExecution timeMemory
1257470math_rabbit_1028Souvenirs (IOI25_souvenirs)C++20
0 / 100
0 ms412 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;

vector<long long> P;
vector<int> cnt;

vector<long long> total;
vector< pair<vector<int>, long long> > transactions;

void update(vector<int> &ls) {
    for (int x : ls) cnt[x]++;
}

void buy_souvenirs(int N, long long P0) {
    // pair<vector<int>, long long> res = transaction(3);
    P.resize(N);
    P[0] = P0;
    cnt.resize(N);

    transactions.push_back(transaction(P0-1));
    total.push_back(P0-1);

    for (int i = 2; i < N-1; i++) {
        P0 /= 2;
        assert(P0 > 0);
        transactions.push_back(transaction(P0));
        total.push_back(P0);
    }

    transactions.push_back(transaction((total.back() - transactions.back().second)/2));
    total.push_back((total.back() - transactions.back().second)/2);

    reverse(transactions.begin(), transactions.end());

    for (auto &tr : transactions) {
        update(tr.first);
        for (int i = 1; i < tr.first.size(); i++) total[total.size()-1] -= P[tr.first[i]];
        total[total.size()-1] -= tr.second;
        P[tr.first[0]] = total.back();
        total.pop_back();
    }

    for (int i = 1; i < N; i++) {
        for (int j = cnt[i]+1; j <= i; j++) transaction(P[i]);
    }

    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...