题目:
n只奶牛坐在一排,每个奶牛拥有ai只苹果,现在你要在它们之间转移苹果,使得最后所有奶牛拥有的苹果数相同,每一次你只能从一只奶牛身上拿走恰好两只苹果到另一只奶牛身上,问最少需要移动多少次可以评分拼过,如果方案不存在,输出-1。
输入描述:
每个输入包含一个测试用例,每个测试用例的第一行包含一个整数n(1<=n<=100),接下来的一行包括n个整数ai(1<=ai<=100)。
输出描述:
输出一行表示最少需要移动多少次可以平分苹果,如果方案不存在则输出-1。
输出例子:
4
7 15 9 5
输出例子:
3
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 using namespace std; 5 6 int sum(const vector<int> &v) 7 { 8 vector<int>::size_type n=v.size(); 9 int sum=0; 10 for(int i=0;i<n;i++) 11 sum+=v[i]; 12 return sum; 13 } 14 15 int count(const vector<int> &v, const int n) 16 { 17 if(sum(v)%n) 18 return -1; 19 else 20 { 21 int ave=sum(v)/n; 22 int cnt=0; 23 for(int i=0;i<n;i++) 24 { 25 if(abs(v[i]-ave)%2) 26 return -1; 27 else 28 { 29 cnt=cnt+abs(v[i]-ave)/2; 30 } 31 } 32 return cnt/2; 33 } 34 } 35 36 int main() 37 { 38 int n;//n为奶牛个数 39 vector<int> v; 40 cin>>n; 41 for(int i=0;i<n;i++) 42 { 43 int temp; 44 cin>>temp; 45 v.push_back(temp); 46 } 47 cout<<count(v,n); 48 }
时间: 2024-10-06 20:10:17