hdu 5073 Galaxy

题意是给定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)

 

posted @ 2015-11-06 20:00  Howe_Young  阅读(176)  评论(0编辑  收藏  举报