Submission #1257938

#TimeUsernameProblemLanguageResultExecution timeMemory
1257938Canuc80kSouvenirs (IOI25_souvenirs)C++20
7 / 100
11 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 n; ll res[201], cnt[201]; void guess(ll price) { auto [v, x] = transaction(price); for (auto x: v) cnt[x] ++; price -= x; for (int i = v.size() - 1; i >= 1; i --) { if (res[v[i]] != 1e18) {price -= res[v[i]]; continue;} ll rem = 0; for (int j = 0; j < i; j ++) rem += (v[j] - v[i]); guess((price - rem) / (i + 1)); price -= res[v[i]]; } res[v[0]] = price; ll nxt = v[0] + 1; while (nxt != n && res[nxt] != 1e18) nxt ++; if (nxt == n && res[n - 1] != 1e18) return; guess(res[nxt - 1] - 1); } void buy_souvenirs(int n, long long p) { ::n = n; res[0] = p; for (int i = 1; i < n; i ++) res[i] = 1e18; guess(res[0] - 1); for (int i = 1; i < n; i ++) for (int j = cnt[i] + 1; j <= i; j ++) transaction(res[i]); // for (int i = 0; i < n; i ++) cout << cnt[i] << ' '; cout << 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...