BZOJ1045
传送门: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;\
}
posted on 2017-06-24 09:54 yjbjingcha 阅读(149) 评论(0) 编辑 收藏 举报