经典模型:
求使式子
∑ni=1∣x−Ci∣
达到最小的 x 的值,
Ci 为给定常数, i∈[1,n] .
易得 x为Ci的中位数,问题就解决了.
AC code:
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll N=2000010;
ll n,c,b1,ans;
ll a[N],f[N];
ll Abs(ll x){
return x<0?-x:x;
}
int main(){
scanf("%lld",&n);
for(ll i=1;i<=n;i++){
scanf("%lld",&a[i]);
c+=a[i];
}
c/=n;
for(ll i=2;i<=n;i++) f[i]=f[i-1]+c-a[i];
sort(f+1,f+n+1);
b1=f[(n>>1)+1];
for(ll i=1;i<=n;i++) ans+=Abs(b1-f[i]);
printf("%lld",ans);
return 0;
}