【JZOJ 4585】Robert 的军队

Description

【JZOJ 4585】Robert 的军队_第1张图片

Analysis

这题出得真好。
可以证明,高度排序之后选连续的一段一定是最优的。
且,连续的一段,长度为 L 的最优。
注意要同时感性&理性理解。

Code

#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=100010;
double a[N],sum[N],sum2[N];
int main()
{
    freopen("army.in","r",stdin);
    freopen("army.out","w",stdout);
    int n,l,r;
    double ans=2147483647;
    scanf("%d %d %d",&n,&l,&r);
    fo(i,1,n) scanf("%lf",&a[i]);
    sort(a+1,a+n+1);
    fo(i,1,n) sum[i]=sum[i-1]+a[i],sum2[i]=sum2[i-1]+a[i]*a[i];
    fo(i,1,n-l+1)
    {
        int j=i+l-1;
        double ave=(sum[j]-sum[i-1])*1.0/l;
        double t=(sum2[j]-sum2[i-1]+l*ave*ave-2*ave*(sum[j]-sum[i-1]))*1.0/l;
        ans=min(ans,t);
    }
    printf("%.3lf",ans);
    return 0;
}

你可能感兴趣的:(数学,方差,结论)