Submission #1312386

#TimeUsernameProblemLanguageResultExecution timeMemory
1312386saayan007Souvenirs (IOI25_souvenirs)C++20
7 / 100
13 ms400 KiB
#include "souvenirs.h"
#include "bits/stdc++.h"
using namespace std;

// #include "atcoder/"
// using namespace atcoder;

using ll = long long;
using vi = vector<int>;
using dt = pair<vector<int>, ll>;

#define eb emplace_back
#define fr first
#define sc second
#define mp make_pair

pair<vector<int>, ll> qry(ll M) {
    // printf("querying %lld\n", M);
    return transaction(M);
}

void buy_souvenirs(int n, long long m) {
    dt a[n];
    ll b[n];
    b[1] = m - 1;
    a[1] = qry(b[1]);
    for(int i = 2; i < n; ++i) {
        b[i] = (b[i - 1] - a[i - 1].sc + (ll)(a[i - 1].fr.size()) - 1) / ((ll)(a[i - 1].fr.size())) - 1;
        // if(a[i - 1].fr.size() == 1) --b[i];
        a[i] = qry(b[i]);
    }
    int p[n];
    p[0] = m;
    p[n - 1] = b[n - 1] - a[n - 1].sc;
    for(int i = n - 2; i > 0; --i) {
        vi v = a[i].fr;
        ll r = a[i].sc;
        ll c = b[i];
        p[i] = c - r;
        for(int x : v) {
            if(x != i) {
                p[i] -= p[x];
            }
        }
    }
    int cnt[n] = {};
    for(int i = 1; i < n; ++i) {
        for(int x : a[i].fr) ++cnt[x];
    }
    // for(int v : cnt) printf("%d ", v);
    // printf("\n");
    for(int i = 1; i < n; ++i) {
        while(cnt[i] < i) {
            qry(p[i]);
            ++cnt[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...