Submission #1252506

#TimeUsernameProblemLanguageResultExecution timeMemory
1252506anfiSouvenirs (IOI25_souvenirs)C++20
4 / 100
0 ms412 KiB
#include"souvenirs.h" #include <bits/stdc++.h> using namespace std; #define fi first #define se second const long long inf = 1e9; long long n,last,p[105],cn[105]; long long hitung(int s, int k){ s += k*(k-1)/2+k-1; return s/k; } void fin(long long initial_money) { vector<long long> money_stack; vector<vector<int>> v_stack; vector<long long> sum_stack; vector<int> stage_stack; money_stack.push_back(initial_money); v_stack.emplace_back(); sum_stack.push_back(0); stage_stack.push_back(0); while (!money_stack.empty()) { int d = money_stack.size() - 1; if (stage_stack[d] == 0) { auto [v, remain] = transaction(money_stack[d]); v_stack[d] = v; sum_stack[d] = money_stack[d] - remain; for (int i : v) cn[i]++; if (v[0] < last) { while (!v.empty() && v.back() >= last) { sum_stack[d] -= p[v.back()]; v.pop_back(); } v_stack[d] = v; if (v[0] + 1 != last) { long long new_money = hitung(sum_stack[d], v.size()) - 1; money_stack.push_back(new_money); v_stack.emplace_back(); sum_stack.push_back(0); stage_stack.push_back(0); continue; } } stage_stack[d] = 1; } if (stage_stack[d] == 1) { int idx = v_stack[d][0]; p[idx] = sum_stack[d]; last = idx; money_stack.pop_back(); v_stack.pop_back(); sum_stack.pop_back(); stage_stack.pop_back(); } } } void buy_souvenirs(int N, long long p0){ memset(cn, 0, sizeof(cn)); memset(p, 0, sizeof(p)); p[0] = p0, n = N; fin(p0-1); for(int i = 1; i < N; i++){ while(cn[i] < i){ transaction(p[i]); cn[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...