[NOIP2002 提高组] 均分纸牌

【问题描述】

  有 n 堆纸牌,编号分别为 1,2,…,n。每堆上有若干张,但纸牌总数必为 n 的倍数。可以在任一堆上取若于张纸牌,然后移动。

  移牌规则为:在编号为 1 堆上取的纸牌,只能移到编号为 2 的堆上;在编号为 n 的堆上取的纸牌,只能移到编号为 n-1 的堆上;其他堆上取的纸牌,可以移到相邻左边或右边的堆上。

  现在要求找出一种移动方法,用最少的移动次数使每堆上纸牌数都一样多。

【输入格式】

  第 1 行为整数n,表示有n堆纸牌。
  第 2 行有 n 个整数:A1 A2 … An ,Ai 表示第 i 堆纸牌初始数量。

【输出格式】

  所有堆均达到相等时的最少移动次数。

【输入样例】

4
9 8 17 6

【输出样例】

3
【数据范围】

1 <= N <= 100  , l<= Ai <=10000

`#include
using namespace std;

int main()
{
int a[10000],x,n,sum=0,k=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
sum=sum+a[i];
}
x=sum/n;
for(int i=0;i<n;i++)
{
a[i]=a[i]-x;
}
for(int i=0;i<n;i++)
{
/* if(a[i]=0){
n--;
}*/
if(a[i]==0)
{
continue;
}
a[i+1]=a[i+1]+a[i];
k++;
}
printf("%d",k);
return 0;
}`

上一篇:1314:过河卒(Noip2002)


下一篇:NOIP2002提高组题解