牛客-分苹果

题目

描述

n 只奶牛坐在一排,每个奶牛拥有 ai 个苹果,
现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数都相同,
每一次,你只能从一只奶牛身上拿走恰好两个苹果到另一个奶牛上,
问最少需要移动多少次可以平分苹果,如果方案不存在输出 -1。

输入

每个输入包含一个测试用例。
每个测试用例的第一行包含一个整数 n(1 <= n <= 100),
接下来的一行包含 n 个整数 ai(1 <= ai <= 100)。

输出

输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出 -1。

Example

Input

4
7 15 9 5

Output

3

题解

思路

  • 因为每次只能移动两个苹果,所以苹果的个数要么全为奇数,要么全为偶数,
  • 苹果总数 sum 必须可以被奶牛数量 n 整除;
  • 每个奶牛平均得到的苹果数的奇偶性应该和苹果初始的奇偶性相同
  • 满足以上条件方案存在,计算输出最小移动次数;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include<bits/stdc++.h>

using namespace std;

int apples[101],n,odd,even,sum,avg,cnt;

int main()
{
while(cin>>n)
{
memset(apples,0,sizeof apples);
cnt=sum=odd=even=avg=0;
for(int i=0;i<n;++i)
{
cin>>apples[i];
if(apples[i]&1)++odd;
else ++even;
sum+=apples[i];
}
if(odd&&even)
{
cout<<-1<<endl;
continue;
}
if(sum%n)
{
cout<<-1<<endl;
continue;
}
avg=sum/n;
if(avg&1&&even||!(avg&1)&&odd)
{
cout<<-1<<endl;
continue;
}
for(int i=0;i<n;++i)
{
if(apples[i]>avg)
cnt+=apples[i]-avg;
}
cout<<(cnt>>1)<<endl;
}
}