题解
- 显然纸牌总数必为n的倍数,否则无解(题目也说了
- 每个人和平均数(最后的纸牌数)差多少,就要从旁边的人手中拿多少张牌。
- 即使某个时刻某人手中的牌是负数也没有关系,可以认为是他a[i]从a[i+1]手中拿牌发生在a[i-1]从a[i]手中拿牌之前。
所以,直接算出平均数。
然后遍历序列,未达到的就从右边的拿那么多张牌,累加答案操作次数。
代码
#include<iostream>
using namespace std;
const int maxn = 110;
int a[maxn], sum, ans;
int main(){
int n; cin>>n;
for(int i = 1; i <= n; i++){
cin>>a[i]; sum += a[i];
}
sum /= n;
for(int i = 1; i <= n; i++){
if(a[i] != sum){
ans++;
a[i+1] -= sum-a[i];
}
}
cout<<ans<<'
';
return 0;
}