Educational Codeforces Round 3

Posted kisekipurin2019

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 3相关的知识,希望对你有一定的参考价值。

题目链接:https://codeforces.com/contest/609

A - USB Flash Drives

送分题。

B - The Best Gift

送分题。

C - Load Balancing

题意:给一个数组,每次可以选一对数字,分别进行+1-1。使用最少次数的操作,达到最小的极差。

题解:最小的极差要么是0要么是1。可以算出sum,然后算出上平均值和下平均值的值(和个数?根本不关心个数),把<下平均值的都变成下平均值,大于上平均值的都变成上平均值。

int a[100005];

void test_case() {
    int n;
    scanf("%d", &n);
    ll sum = 0;
    for(int i = 1; i <= n; ++i) {
        scanf("%d", &a[i]);
        sum += a[i];
    }
    ll LM = sum / n;
    ll RM = LM + 1;
    int cntRM = sum % n;
    ll ans = 0;
    for(int i = 1; i <= n; ++i) {
        if(cntRM > 0 && a[i] >= RM) {
            ans += a[i] - RM;
            --cntRM;
        } else if(a[i] >= LM)
            ans += a[i] - LM;
    }
    printf("%lld
", ans);
}

启示:注意只需要统计被-1的那一半就可以了,贪心选择能变成上平均值的先变完上平均值,剩下的全部都要变成下平均值(含排在后面的多出来的上平均值)。假算法用assert就知道假在哪里,相当于可以看到一点点数据。

以上是关于Educational Codeforces Round 3的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 7 A

Educational Codeforces Round 7

Educational Codeforces Round 90

Educational Codeforces Round 33

Codeforces Educational Codeforces Round 54 题解

Educational Codeforces Round 27