Submission #1307306

#TimeUsernameProblemLanguageResultExecution timeMemory
1307306WH8Souvenirs (IOI25_souvenirs)C++20
7 / 100
13 ms400 KiB
#include <bits/stdc++.h> using namespace std; #include "souvenirs.h" typedef long long ll; void buy_souvenirs(int N, long long P0) { vector<ll> cnt(N, 0), val(N, -1); val[0]=P0; pair<vector<int>, long long> res; auto dfs = [&](auto && dfs, vector<int> cur, ll sum)->void{ while(!cur.empty() ){ /*printf("state "); for(auto it: cur)cout<<it<<", "; printf(" : sum is %lld\n", sum); for(auto it: val)cout<<it<<" "; cout<<endl<<endl;*/ while (!cur.empty() and val[cur.back()] != -1){ sum-=val[cur.back()]; cur.pop_back(); } if(cur.empty())break; if(cur.size() == 1){ val[cur.back()]=sum; if(cur.back() != N-1){ res=transaction(sum-1); for(auto it: res.first)cnt[it]++; dfs(dfs, res.first, sum-1-res.second); } } else { res=transaction(sum/cur.size()); for(auto it: res.first)cnt[it]++; dfs(dfs, res.first, sum/cur.size() - res.second); } } }; for(int i=1;i<N;i++){ if(val[i] == -1){ res = transaction(val[i-1]-1); for(auto it : res.first) cnt[it]++; dfs(dfs, res.first, val[i-1]-1-res.second); } } /*for(auto it:val)cout<<it<<" "; cout<<endl;*/ for(int i=1;i<N;i++){ assert(cnt[i] <= i); for(int j=0;j<i-cnt[i];j++) transaction(val[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...