제출 #1277807

#제출 시각아이디문제언어결과실행 시간메모리
1277807stephit선물 (IOI25_souvenirs)C++20
0 / 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) { int t = p0 - 1; // từ t / 2^i -> t / 2^(i-1) co nhieu nhat 2 so vector<int> v; int r; auto ask = [&](int 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) { int tong = t - r; ask(tong / 2); p[n - 1] = tong / 2 - r; p[n - 2] = 36; } 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) { int tong = t - r; ask(tong / 2); p[v[1]] = tong / 2 - r; ask(tong - 1); p[v[0]] = tong / 2 - r; } } 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...