均摊纸牌核心思路:贪心
从第一个数开始,与平均数作比较,
大于平均数,将多出的给下一个数;
小于平均数,从下一个拿来少的。
#include <stdio.h>
#include <iostream>
#include<algorithm>
using namespace std;
struct node
{
int x;
int y;
}p[101];
int main()
{
int N;
scanf("%d",&N);
int i,sum=0,v,s=0;
for(i=0;i<N;i++)
{
scanf("%d",&p[i].y);
sum=sum+p[i].y;
}
v=sum/N;
for(i=0;i<N;i++)
{
p[i].x=p[i].y-v;
if(p[i].x<0)
{
p[i+1].y=p[i+1].y+p[i].x;s=s+1;
}
if(p[i].x>0)
{
p[i+1].y=p[i+1].y+p[i].x;s=s+1;
}
if(p[i].x=0) continue;
}
printf("%d\n",s);
return 0;
}