Geome try/codechef KAN13F
Материал из DISCOPAL
Версия от 21:55, 14 мая 2022; Geome try (обсуждение | вклад) (Новая страница: «Codechef/KAN13F <source lang="cpp"> #pragma GCC optimize("Ofast") #include <bits/stdc++.h> uint64_t solve(size_t deg, const std::vector<uint64_t>& seq) {…»)
#pragma GCC optimize("Ofast") #include <bits/stdc++.h> uint64_t solve(size_t deg, const std::vector<uint64_t>& seq) { uint64_t ans = 0; size_t cnt = seq.size(); auto steps = (cnt - 1 + deg - 2) / (deg - 1); std::priority_queue<uint64_t, std::vector<uint64_t>, std::greater<uint64_t>> vals; for (auto val : seq) { vals.push(val); } size_t curr_deg = deg; for (auto rest_steps = steps, rest_cnt = cnt; rest_steps > 0 && rest_cnt > 1; rest_cnt -= (curr_deg - 1), --rest_steps) { curr_deg = 2; if (rest_cnt - 2 > (rest_steps - 1) * (deg - 1)) { curr_deg = rest_cnt - (rest_steps - 1) * (deg - 1); } uint64_t sum = 0; for (size_t i = 0; i < curr_deg && !vals.empty(); ++i) { sum += vals.top(); vals.pop(); } ans += sum; vals.push(sum); } return ans; } int main() { size_t tests = 0; // std::cin >> tests; scanf("%llu", &tests); std::vector<uint64_t> answers(tests); for (auto& ans : answers) { size_t cnt = 0, deg = 0; // std::cin >> cnt >> deg; scanf("%llu %llu", &cnt, °); std::vector<uint64_t> seq(cnt); for (auto& val : seq) { // std::cin >> val; scanf("%llu", &val); } ans = solve(deg, seq); } for (size_t idx = 0; idx < tests; ++idx) { // std::cout << "Case " << idx + 1 << ": " << answers[idx] << '\n'; printf("Case %llu: %llu\n", idx + 1, answers[idx]); } return 0; }
Решено: Ельчинов Егор 21:55, 14 мая 2022 (UTC)
[ Хронологический вид ]Комментарии
Войдите, чтобы комментировать.