码迷,mamicode.com
首页 > 其他好文 > 详细

hdu5073 贪心

时间:2014-10-25 17:18:17      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   for   sp   

这题说的是给了 n个值每个值 然后 他们的品均值 作为中点 然后每个点到中点的均值的平方 和最小值是多少

有 k 个点可以重新 放过位置 , 这样我们 应该 会选 最近的那个 n-k个点 然后 取他们的均值点  这样我们只要先排序 排完后 直接 遍历过去

bubuko.com,布布扣
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 50005;
double A[maxn];
int main()
{
    int cas;
    scanf("%d",&cas);
    for(int cc=1; cc<=cas; ++cc){
         int n,k;
         scanf("%d%d",&n,&k);
         for(int i=0; i<n; ++i)
             scanf("%lf",&A[i]);
         sort(A,A+n);
         double square=0,dec=0,x=0;
         if(n==k){
             printf("0\n"); continue;
         }
         int sz=n-k;

         for(int i=0; i<sz; ++i){
             square+= A[i]*A[i];
             dec+=2*A[i];
             x+=A[i];
         }
         double loc=x/sz;
         double ans = -dec*loc + square + loc*loc*sz;
         for(int i=sz; i<n; ++i){
             square-=A[i-sz]*A[i-sz];
             square+=A[i]*A[i];
              dec-=2*A[i-sz];
              dec+=2*A[i];
              x-=A[i-sz];
              x+=A[i];
              loc=x/sz;
             ans=min(ans,-dec*loc + square + loc*loc*sz);
         }
         printf("%lf\n",ans);
    }
    return 0;
}
View Code

 

hdu5073 贪心

标签:style   blog   http   color   io   os   ar   for   sp   

原文地址:http://www.cnblogs.com/Opaser/p/4050250.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!