Submission #1305248

#TimeUsernameProblemLanguageResultExecution timeMemory
1305248petezaSouvenirs (IOI25_souvenirs)C++20
100 / 100
13 ms400 KiB
#include <bits/stdc++.h> #include "souvenirs.h" using namespace std; using ll = long long; /* int costs[5] = {30,21,20,15,6}; pair<vector<int>, ll> transaction(ll m) { vector<int> res; for(int i=0;i<5;i++) { if(costs[i]<=m) { res.push_back(i); m -= costs[i]; } } return {res, m}; }*/ int n; void rec(vector<int>&cnt, vector<ll>&cost, int idx, ll cc) { if(idx>=n) return; if(~cost[idx]) return; auto res = transaction(cc-1); idx = res.first.front(); for(auto&e:res.first)cnt[e]++; while(res.first.size() > 1) { if(!(~cost[res.first.back()])) { rec(cnt, cost, res.first.back(), (cc-1-res.second)/res.first.size()+1); } res.second += cost[res.first.back()]; res.first.pop_back(); } //cout << idx << "->" << cc-1 << "\n"; cost[idx] = cc-1-res.second; rec(cnt, cost, idx+1, cost[idx]); } void buy_souvenirs(int n, ll p0) { ::n=n; vector<int> cnt(n); vector<ll> cost(n, -1); cost[0]=p0; rec(cnt, cost, 1, p0); for(int i=0;i<n;i++) { //cout << cost[i] << " "; while(cnt[i]<i) { cnt[i]++; transaction(cost[i]); } } } /* int main() { // your code goes here buy_souvenirs(5, 30); return 0; }*/
#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...