这个题就是个公式推导,看y神的。
推导完成后变成了一个中心点距离所有点距离之和最小的问题。
C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+6;
ll a[maxn];
int n;
ll sum;
int main()
{
scanf("%d",&n);
for(int i = 1; i <= n; i ++)
{
scanf("%lld",&a[i]);
sum += a[i]; //全部值之和
}
ll ave = sum / n; //平均值
ll ans = 0;
for(int i = n; i > 1; i --)
{
a[i] = ave - a[i] + a[i+1]; //推导出的公式
}
a[1] = 0;
sort(a+1,a+n+1);
for(int i = 1; i <= n; i ++)
{
ans += abs(a[i] - a[(n+1)/2]);
}
cout << ans << endl;
return 0;
}