题目:codevs1098
思路: 直接从左到右,遇到小于均值的,直接向右边拿,大于均值的,直接给右边,因为纸牌总数为堆数n的倍数,所以最后肯定能均分;
代码如下:
#include<iostream>
#include<algorithm>
using namespace std;
int a[105];
int main()
{
int n;
cin >> n;
int count = 0;
int sum = 0;
for(int i = 0;i < n;i++)
{
cin >> a[i];
sum+= a[i];
}
sum/=n;
for(int i = 0;i < n;i++)
{
if(a[i]==sum)continue;
if(a[i] > sum){
a[i+1] += a[i]-sum;
a[i] = sum;
count++;
// cout << count << "/" << i << " ";
}
else {
a[i+1] = a[i+1] - sum+a[i];
a[i] = sum;
count++;
//cout << count << "/" << i << " ";
}
}
/*for(int i = 0;i < n;i++)
{
cout << a[i] << " ";
}*/
cout << count;
return 0;
}