这是一个非常棘手的问题,只是一个单挑。
我们有N
个细分受众群,编号从1
到N
,并由其左右点{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。
答案 0 :(得分:1)
最后一段的长度是R-L,其中R是右端的位置,L是左端的位置。
期望是线性操作所以
E(长度)= E(R) - E(L)
我们可以分别计算E(R)和E(L),然后合并结果。
我们可以迭代计算左端位置的PDF。
它开始位于第一个段的左端(左[1]),概率为1。
当它落在段i之外时,如果左端在Left [i]和Right [i]之间,则会发生有趣的碰撞。我们将有趣的碰撞定义为影响左端位置的碰撞。
这里的关键点是,如果我们需要知道右端的当前位置以确定是否存在碰撞,那么这不是一个有趣的碰撞!这是因为如果我们需要知道右端,那么段i必须完全位于起点的右侧,因此它不会影响左边缘的位置。
因此,为了更新PDF,我们收集Left [i]和Right [i]之间的所有概率质量,乘以碰撞概率,并将结果添加到Left [i]。 (这些位置的现有质量按碰撞概率缩小。)
目前我们有一个O(n ^ 2)算法,由n次迭代的O(n)组成,用于计算和修改每个范围内的质量。
但是,我们可以使用诸如segment tree之类的数据结构来允许我们在O(logn)时间内执行每次迭代,总时间复杂度为O(nlogn)。