Submission #1319410

#TimeUsernameProblemLanguageResultExecution timeMemory
1319410Trisanu_DasSouvenirs (IOI25_souvenirs)C++20
4 / 100
0 ms400 KiB
#include "souvenirs.h" #include <bits/stdc++.h> using namespace std; using ll = long long; int Nglobal; ll P[110]; int bought_count[110]; pair<vector<int>, ll> do_query(ll M) { auto res = transaction(M); for (int idx : res.first) { bought_count[idx]++; } return res; } int dfs(ll val, int Mlimit) { auto pr = do_query(val); vector<int> V = pr.first; ll R = pr.second; int cur = V[0]; ll T = val - R; while (true) { while (!V.empty() && V.back() >= Mlimit) { T -= P[V.back()]; V.pop_back(); } if ((int)V.size() == 1) break; int k = (int)V.size(); ll newVal = (T - 1) / k; int newLimit = dfs(newVal, Mlimit); Mlimit = newLimit; } P[cur] = T; return cur; } void buy_souvenirs(int N, long long P0) { Nglobal = N; memset(bought_count, 0, sizeof(bought_count)); dfs(P0 - 1, N); for (int i = 1; i < N; ++i) { for (int times = bought_count[i]; times < i; ++times) { do_query(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...