Submission #1254109

#TimeUsernameProblemLanguageResultExecution timeMemory
1254109garam1732선물 (IOI25_souvenirs)C++20
25 / 100
12 ms412 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>
using namespace std;

#define ff first
#define ss second
#define bl ' '
#define endl '\n'
#define all(v) (v).begin(), (v).end()
#define comp(v) (v).erase(unique(all(v)), (v).end())
#define lbd(v,x) lower_bound(all(v), (x))-(v).begin()
#define ubd(v,x) upper_bound(all(v), (x))-(v).begin()

typedef long long ll;
typedef pair<int, int> pi;
typedef pair<pi, int> pii;
typedef pair<int, pi> ipi;
typedef pair<pi, pi> pipi;
typedef pair<ll, ll> pll;

const int MAXN = 100100*1;
const ll MOD = 1e9+7;
const ll INF = 1e9+10;

pair<vector<int>, ll> res;
int cnt[110];
ll arr[110];

void dnc(int s, int e, ll tot) {
    ll sum = tot - res.ss;
    auto v = res.ff; int sz = v.size();

    if(s == e) {
        arr[s] = sum;
        return;
    }

    if(sz == 1) {
        arr[s] = sum;
        res = transaction(sum-1);
        for(int x:res.ff) cnt[x]++;
        dnc(s+1, e, sum-1);
        return;
    }

    ll avg = sum/sz;
    res = transaction(avg);
    for(int x:res.ff) cnt[x]++;
    int idx = res.ff[0];
    dnc(idx, e, avg);

    while(v.size() && v.back() >= idx) {
        sum -= arr[v.back()]; v.pop_back();
    }

    res = make_pair(v, 0);
    dnc(s, idx-1, sum);
}

void buy_souvenirs(int N, ll P0) {
    res = transaction(P0-1);
    for(int x:res.ff) cnt[x]++;
    dnc(1, N-1, P0-1);

    for(int i=1; i<N; i++) {
        while(cnt[i] < i) {
            transaction(arr[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...