首页 > 其他 > 详细

【hdu4609】 3-idiots FFT

时间:2018-01-06 15:06:44      阅读:224      评论:0      收藏:0      [点我收藏+]

题外话:好久没写blog了啊~~

题目传送门

题目大意:给你n条长度为ai的线段,求在其中任选三条出来,能构成三角形的概率。即求在这n条线段中找出三条线段所能拼出的三角形数量/c(n,3)。

假设我们手中有3条长度分别为$x,y,z$的边(为了简化问题我们假设$x<y<z$,$x,y,z$相等的情况另行讨论),如果他们能拼成三角形,必然满足$x+y>z$且$z-y<x$。

该题的$O(n^3)$做法:枚举其中的3条边,套用上面的判断公式,进行累计。

但通过简单的变式,我们假设我们已经确定了$x$和$y$,那么$z$的范围即为$[x,x+y)$,我们维护一个数组$num$,$num_i$表示长度为i的线段数量。再维护一个num的前缀和sum。则$ans=\sum^{n-1}_{x=1}  \sum^{n}_{y=x+1} num_x * num_y*(sum[x+y-1]-sum[y])$,运算该和式的时间复杂度为$O(n^2)$

 

【hdu4609】 3-idiots FFT

原文:https://www.cnblogs.com/xiefengze1/p/8214112.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!