题目链接:该题是luogu试炼场的2-2:T2
试炼场2-2题解包:
题目大意:
1 有n堆纸牌,要求只能移动到相邻的位置;
2 要求最少的移动次数,使得每一堆数量相同
解题思路:
1 预处理:要求每堆最后一样多,肯定要先算出平均值;
2 题目还规定:移动纸牌只能放在相邻的位置,那么先放和后放,似乎没什么太大关系,那就从前往后扫一遍。
上代码:
//luogu1031:均分纸牌
//求平均值
//递推一遍
#include<cstdio>
int a[110];
int n,su=0,ans=0;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]),su+=a[i];
su/=n;//求每堆纸牌最终的平均值
for(int i=1;i<n;i++)
{
if(a[i]<su) //小于平均值,从后面拿
{
int x=su-a[i];
a[i+1]-=x;
ans++;
}
else if(a[i]>su)//大于平均值,送给后面
{
int x=a[i]-su;
a[i+1]+=x;
ans++;
}
}
printf("%d",ans);
return 0;
}