Submission #1277814

#TimeUsernameProblemLanguageResultExecution timeMemory
1277814stephitSouvenirs (IOI25_souvenirs)C++20
4 / 100
1 ms400 KiB
#include "souvenirs.h" #include <bits/stdc++.h> using namespace std; #define ll long long int cnt[101]; ll p[101]; void buy_souvenirs(int n, long long p0) { ll t = p0 - 1; // từ t / 2^i -> t / 2^(i-1) co nhieu nhat 2 so vector<int> v; ll r; auto ask = [&](ll M) -> void { auto [vv, rr] = transaction(M); for (int i : vv) cnt[i]++; v = vv, r = rr; }; while (1) { ask(t); if (v.back() == n - 1) { if (v.size() == 1) p[n - 1] = t - r; if (v.size() == 2) { ll tong = t - r; ask(tong / 2); p[n - 1] = tong / 2 - r; p[n - 2] = tong - p[n - 1]; } break; } t /= 2; } while (t < p0 - 1) { t *= 2; ask(t); while (!v.empty() && p[v.back()] > 0) { r += p[v.back()]; v.pop_back(); } if (v.size() == 1) p[v[0]] = t - r; if (v.size() == 2) { ll tong = t - r; ask(tong / 2); p[v[1]] = tong / 2 - r; p[v[0]] = tong - p[v[1]]; } } for (int i = 1; i <= n - 1; i++) { for (int j = cnt[i] + 1; j <= i; j++) transaction(p[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...