Submission #1257616

#TimeUsernameProblemLanguageResultExecution timeMemory
1257616Canuc80kSouvenirs (IOI25_souvenirs)C++20
0 / 100
0 ms412 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using ld = long double; std::pair<std::vector<int>, long long> transaction(long long M); ll res[101], cnt[101], tmp[101]; void buy_souvenirs(int n, long long p) { memset(res, 0x3f, sizeof res); res[0] = p; for (int i = 1; i < n; i ++) { res[i] = min({res[i], 3 * res[i - 1] / 4}); if (i != 1) res[i] = min(res[i], res[i - 2] / 2); for (int j = cnt[i] + 1; j <= i; j ++) { tmp[i] = res[i - 1] / 2; for (int k = i + 1; k < n; k ++) tmp[k] = tmp[k - 1] / 2; tmp[n - 1] = max(tmp[n - 1], 1ll); tmp[n - 2] = max(tmp[n - 2], 2ll); for (int k = n - 3; k >= i; k --) tmp[i] = max(tmp[i], tmp[i + 1] + tmp[i + 2]); // cout << "???: " << i << ' ' << res[i] << endl; auto [v, x] = transaction(res[i]); // cout << "Buy: " << res[i] << endl; for (int k = 0; k < v.size(); k ++) { cnt[v[k]] ++; if (k != 0) res[i] -= tmp[v[k]]; } res[i] -= x; // cout << "Res: " << res[i] << endl; // for (auto x: v) cout << x << ' '; cout << endl; // cout << "Rem: " << x << endl; // cout << "Tmp: " << endl; // for (int k = i; k < n; k ++) cout << i << ' ' << tmp[k] << endl; } } for (int i = 0; i < n; i ++) cout << res[i] << ' '; cout << endl; }
#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...