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

hdu 5073 Galaxy

时间:2015-11-06 20:49:35      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

题意是给定n个点,让求找到一个点p使得sigma( (a[i] - p) ^ 2 ) 最小,其中a[i]表示第i个点的位置。其中有k个点不用算。

思路:发现这道题其实就是求n-k个点方差。

那么推一下公式就是:

sigma( (a[i] - p)^ 2 )

= sigma( a[i]^2 + p^2 - 2*a[i]*p )

= sigma( a[i]^2 + p^2) ) - sigma( 2*a[i]*p )

= sigma( a[i]^2 ) + (n-k)*(p^2) - 2*p*sigma( a[i] ) //因为sigma求的是n-k个数的和

= sum2[i] + (n-k)*(p^2) - 2*p*sum[i]

这里sum2[i]就是前个数的平方和,sum[i]是前i个数的和。p是这段长度为n-k的区间的平均值。一遍预处理就可以求出来。所以总的时间复杂度也是O(n)

 

hdu 5073 Galaxy

标签:

原文地址:http://www.cnblogs.com/Howe-Young/p/4943495.html

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