Submission #1249443

#TimeUsernameProblemLanguageResultExecution timeMemory
1249443jtnydv25Souvenirs (IOI25_souvenirs)C++20
100 / 100
11 ms424 KiB
#include "souvenirs.h" #include<bits/stdc++.h> using namespace std; void buy_souvenirs(int n, long long P0){ vector<long long> P(n, P0); vector<int> cnt(n); function<pair<vector<int>, long long>(long long, int)> query = [&](long long m, int k){ pair<vector<int>, long long> res = transaction(m); vector<int> &c = res.first; long long p = res.second; long long used = m - p; for(int i: c) cnt[i]++; while(!c.empty() && c.back() >= k){ used -= P[c.back()]; c.pop_back(); } assert(!c.empty()); return make_pair(c, used); }; function<int(long long, int)> get = [&](long long X, int k){ pair<vector<int>, long long> Q = query(X, k); vector<int> S = Q.first; long long sm = Q.second; int i = S[0]; while((int)S.size() > 1){ k = get((sm - 1) / (int)S.size(), k); while(!S.empty() && S.back() >= k){ sm -= P[S.back()]; S.pop_back(); } assert(!S.empty()); } P[i] = sm; if(k > i + 1) get(P[i] - 1, k); return i; }; get(P[0] - 1, n); for(int i = 0; i < n; i++){ while(cnt[i] < i){ transaction(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...