제출 #1283966

#제출 시각아이디문제언어결과실행 시간메모리
1283966janson0109선물 (IOI25_souvenirs)C++20
100 / 100
13 ms400 KiB
#include "souvenirs.h"
#include <bits/stdc++.h>
#define F first
#define S second
#define lol ios::sync_with_stdio(false);cin.tie(NULL);
typedef long long ll;
typedef long double ld;
using namespace std;
const ll M = 1000000007;

void processi(ll i, vector<ll> &P, vector<ll> &cnt);

void process(vector<int> seq, ll sum, vector<ll> &P, vector<ll> &cnt) {
    /*for(auto & x : seq) cout << x << ' ';
    cout << '\n';
    cout << sum << '\n';*/
    vector<int> v;
    for(auto & x : seq) {
        if(P[x] == -1) v.push_back(x);
        else sum -= P[x];
    }
    ll k = v.size();
    if(k == 0) return;
    if(k == 1) {
        P[v[0]] = sum;
        return;
    }
    auto res = transaction(sum / k);
    for(auto & x : res.F) cnt[x]++;
    process(res.F, sum / k - res.S, P, cnt);
    processi(v.back(), P, cnt);
    process(v, sum, P, cnt);
}

void processi(ll i, vector<ll> &P, vector<ll> &cnt) {
    if(P[i] != -1) return;
    if(P[i-1] == -1) processi(i-1, P, cnt);
    if(P[i] != -1) return;
    auto res = transaction(P[i-1] - 1);
    for(auto & x : res.F) cnt[x]++;
    process(res.F, P[i-1] - 1 - res.S, P, cnt);
}

void buy_souvenirs(int N, long long P0) {
    vector<ll> P(N,-1), cnt(N,0); P[0] = P0;
    processi(N-1, P, cnt);
    for(ll i=0; i<N; i++) for(ll j=cnt[i]; 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...