又一类均分纸牌问题,代码很详细了,两次被long long
的数据范围卡23333
AC-Code
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=1000005;
long long ai[MAXN],si[MAXN],k,n,avg,ans;
long long Abs(long long x)
{
return (x<0)?(-x):(x);
}
int main()
{
scanf("%lld",&n);
for (int i=1;i<=n;i++)
{
scanf("%lld",&ai[i]);
avg+=ai[i];
}
avg/=n;
for (int i=1;i<=n;i++)
{
si[i]=si[i-1]+ai[i]-avg;
}
sort(&si[1],&si[n+1]);
k=si[n/2];
for (int i=1;i<=n;i++)
ans+=Abs(si[i]-k);
printf("%lld\n",ans);
return 0;
}