Submission #1254858

#TimeUsernameProblemLanguageResultExecution timeMemory
1254858TimoshSouvenirs (IOI25_souvenirs)C++20
25 / 100
1086 ms420 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; ll s = p[i] - 1; int sz = 2; while (1) { cur = ch(s); s = p[i] - 1 - cur.second; sz = cur.first.size(); if (sz == 1) break; s = s / sz; } p[cur.first[0]] = s, rec(rec, cur.first[0]); int last = i; for (int j = i; j < cur.first[0]; j++) { if (p[j] == 0) ch(p[last] - 1); else last = i; } 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...