Submission #1254856

#TimeUsernameProblemLanguageResultExecution timeMemory
1254856TimoshSouvenirs (IOI25_souvenirs)C++20
25 / 100
12 ms412 KiB
#include <bits/stdc++.h> #include "souvenirs.h" using namespace std; #define ll long long void buy_souvenirs(int n, long long P0) { vector<ll> p(n), used(n); p[0] = P0; map<ll, pair<vector<int>, ll>> mp; auto ch = [&](ll x) -> pair<vector<int>, ll> { if (mp.count(x)) return mp[x]; pair<vector<int>, ll> hm = transaction(x); for (auto &i : hm.first) used[i]++; return mp[x] = hm; }; auto rec = [&](auto rec, int i) -> void { if (i == n - 1) return; pair<vector<int>, ll> cur = ch(p[i] - 1); ll s = p[i] - 1 - cur.second; int sz = cur.first.size(); if (sz == 1) p[i + 1] = s, rec(rec, i + 1); else if (sz > 1) { s = s / sz; cur = ch(s); rec(rec, cur.first[0]); for (auto &[x, y] : mp) { int s = x - y.second, c = 0, j = 0; for (auto &i : y.first) { if (p[i] == 0) c++, j = i; s -= p[i]; } if (c == 1) p[j] = s; } } }; rec(rec, 0); for (int i = 0; i < n; i++) for (int j = used[i]; j < i; j++) transaction(p[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...