• 【NOIP2002】【codevs1098】均分纸牌


    题解

    1. 显然纸牌总数必为n的倍数,否则无解(题目也说了
    2. 每个人和平均数(最后的纸牌数)差多少,就要从旁边的人手中拿多少张牌。
    3. 即使某个时刻某人手中的牌是负数也没有关系,可以认为是他a[i]从a[i+1]手中拿牌发生在a[i-1]从a[i]手中拿牌之前。

    所以,直接算出平均数。
    然后遍历序列,未达到的就从右边的拿那么多张牌,累加答案操作次数。

    代码

    #include<iostream>
    using namespace std;
    const int maxn = 110;
    int a[maxn], sum, ans;
    int main(){
        int n;  cin>>n;
        for(int i = 1; i <= n; i++){
            cin>>a[i];  sum += a[i];
        }
        sum /= n;
        for(int i = 1; i <= n; i++){
            if(a[i] != sum){
                ans++;
                a[i+1] -= sum-a[i];
            }
        }
        cout<<ans<<'
    ';
        return 0;
    }
  • 相关阅读:
    POJ 2136
    POJ 2121
    POJ 2127
    POJ 2126
    POJ 2109
    POJ 2105
    POJ 2101
    POJ 2075
    Uboot — 配置过程
    Uboot — 编译体验
  • 原文地址:https://www.cnblogs.com/gwj1314/p/9444861.html
Copyright © 2020-2023  润新知