思路:由于只能左右互换,因此第一个缺少或过多的纸牌只能交给下一个。也就是说只要第一个合格了,其第一个的纸牌堆多余或缺少的量全由第二个纸牌堆承担。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int a[N];
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int ans=0;
int ave;
int sum=0;
int n;cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
sum+=a[i];
}
ave=sum/n;
for(int i=0;i<n;i++)
{
if(a[i]-ave)//如果a[i]-ave!=0说明第一个纸牌堆不合格 a[i]-ave表示a[i]缺少或多出的纸牌数
{
a[i+1]=a[i]-ave+a[i+1];//a[i+1]现在的纸牌数==a[i]-ave表示a[i]缺少或多出的纸牌数 + a[i+1]原本a[i+1]的纸牌数
ans++;
}
}
cout<<ans;
return 0;
}