下降段与概率的其他段重新组合,确定段的预期中长度

时间:2016-11-25 17:59:56

标签: algorithm

这是一个非常棘手的问题,只是一个单挑。

我们有N个细分受众群,编号从1N,并由其左右点{Left[i],Right[i]}定义。

i段的高度为N-i。第一段(最高段)开始下降而其他段保持固定。如果在秋季期间,细分i在至少一个点与另一个细分j相交,则两者将以概率P[j]/Q[j]重新聚合,并且所获得的细分将继续下降。从两个细分受众群{@ 1}}和{A,B}的重聚中,获得的细分受众群将为{C,D}

要求您确定第一段的预期中等长度(即在达到小于任何其他段的高度的高度之后)。如果此回答是有理数{min(A,C),max(B,D)},系统会要求您确定U/V X

限制:

  • X*V=U (mod 10^9+7)
  • 0 < P < Q < 1 000
  • 0 < Left < Right < 1 000 000
  • N ≤ 100 000
  • time : 2.5 sec

`

输入在第一行包含memory : 32768 kbytes,然后在以下N行包含4个整数:N代表Left, Right, P, Q, - 第i段以概率[Left, Right]与下降段重新组合。 例如:

P/Q

答案大约是49.813963。

1 个答案:

答案 0 :(得分:1)

想法1

最后一段的长度是R-L,其中R是右端的位置,L是左端的位置。

期望是线性操作所以

E(长度)= E(R) - E(L)

我们可以分别计算E(R)和E(L),然后合并结果。

创意2

我们可以迭代计算左端位置的PDF。

它开始位于第一个段的左端(左[1]),概率为1。

当它落在段i之外时,如果左端在Left [i]和Right [i]之间,则会发生有趣的碰撞。我们将有趣的碰撞定义为影响左端位置的碰撞。

这里的关键点是,如果我们需要知道右端的当前位置以确定是否存在碰撞,那么这不是一个有趣的碰撞!这是因为如果我们需要知道右端,那么段i必须完全位于起点的右侧,因此它不会影响左边缘的位置。

因此,为了更新PDF,我们收集Left [i]和Right [i]之间的所有概率质量,乘以碰撞概率,并将结果添加到Left [i]。 (这些位置的现有质量按碰撞概率缩小。)

创意3

目前我们有一个O(n ^ 2)算法,由n次迭代的O(n)组成,用于计算和修改每个范围内的质量。

但是,我们可以使用诸如segment tree之类的数据结构来允许我们在O(logn)时间内执行每次迭代,总时间复杂度为O(nlogn)。