传送门:BZOJ1045
结论题。
这个方程组有n个方程和n个变量,但显然,最后一个方程式无意义。
于是考虑:
…
这只要自己计算一下就可以明白,记
……
于是最小化的目标函数就是
完成推导后做法还是很优雅的。
代码上的小细节见下。
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <cmath>
#include <cstring>
using namespace std;
int n;
int a[1000005];
int c[1000005];
long long ave;
void Solve()
{
for(int i=2;i<=n;i++)
c[i]=c[i-1]+a[i]-ave;
sort(c+1,c+n+1);
long long ans=0;
int j=(1+n)/2;
for(int i=1;i<=n;i++)
ans+=abs(c[j]-c[i]);
cout<<ans;
}
void Readdata()
{
freopen("loli.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
ave+=a[i];
ave/=n;
}
void Close()
{
fclose(stdin);
fclose(stdout);
}
int main()
{
Readdata();
Solve();
Close();
return 0;}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/le_ballon_rouge/article/details/47783293