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) {…»)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Codechef/KAN13F

#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, &deg);
        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;
}

Check-me-animated.gif Решено: Ельчинов Егор 21:55, 14 мая 2022 (UTC)

[ Хронологический вид ]Комментарии

(нет элементов)

Войдите, чтобы комментировать.