题目描述
n 只奶牛坐在一排,每个奶牛拥有 a
i 个苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。
输入描述:
每个输入包含一个测试用例。每个测试用例的第一行包含一个整数 n(1 <= n <= 100),接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。
示例1
输入
4 7 15 9 5
输出
3
水题~ 要注意平均数有小数的话直接-1。
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<string>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
#define inf 0x3f3f3f3f
int main()
{
int n,m,i,j,a[105],b[105],sum=0,avg,s=0,k=0;
double avgg;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
avgg=1.0*sum/n;
avg=sum/n;
if(avg!=avgg)
k=1;
//printf("%d\n",avg);
if(k==0)
{
memset(b,0,sizeof b);
for(i=1;i<=n;i++)
{
b[i]=a[i]-avg;
if(b[i]==0)continue;
if(abs(b[i])%2==1)
{
k=1;
break;
}
else if(b[i]>0)
s+=b[i]/2;
}
}
if(k==0)
printf("%d\n",s);
else
printf("-1\n");
}