P1031 [NOIP2002 提高组] 均分纸牌

jiangchenyangsong

2021-03-09 21:25:27

Personal

第一步:求出平均数

第二步:数组a预处理一下

第三步:计算次数

#include<bits/stdc++.h>
using namespace std;

int n,a[105],ans,k,num;

int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        ans+=a[i];
    }
    ans/=n;//算出平均数 
    for(int i=1;i<=n;i++) 
        a[i]-=ans; //预处理 
    for(int i=1;i<n;i++){
        if(!a[i]) continue; //如果为0,则不需要做任何处理 
        a[i+1]+=a[i];   // 把第i堆欠的,或多的转移到i+1堆里
        //a[i]负数相当于把i+1堆中抽出几张,使a[i]=0
        //a[i]正数相当于把i堆中抽出几张,转移到i+1堆中,使a[i]=0
        num++;   //移动次数+1 
    }
    printf("%d\n",num);
    return 0;
}