P1031 [NOIP2002 提高组] 均分纸牌

发布时间 2023-06-07 21:31:20作者: jiangchenyangsong

2021-03-09

第一步:求出平均数

第二步:数组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;
}