Algorithm 下降段以一定概率与其他段重新结合,确定该段的预期中等长度
这是一个非常棘手的问题,只是一个提醒Algorithm 下降段以一定概率与其他段重新结合,确定该段的预期中等长度,algorithm,Algorithm,这是一个非常棘手的问题,只是一个提醒 我们有N段,编号从1到N,由它们的左右点定义,{left[i],right[i]} i-th段位于高度N-i。第一部分(最高部分)开始下降,而其他部分保持不变。如果在下降过程中,一段i至少在一点上与另一段j相交,则两者将以概率P[j]/Q[j]重新结合,并且获得的段将继续下降。从两段的重新组合,{A,B}和{C,D},得到的段将是{min(A,C),max(B,D)} 要求您确定第一个管段的预期中等长度(即达到小于任何其他管段高度后)。如果此答案是一个有理
我们有
N
段,编号从1
到N
,由它们的左右点定义,{left[i],right[i]}
i
-th段位于高度N-i
。第一部分(最高部分)开始下降,而其他部分保持不变。如果在下降过程中,一段i
至少在一点上与另一段j
相交,则两者将以概率P[j]/Q[j]
重新结合,并且获得的段将继续下降。从两段的重新组合,{A,B}
和{C,D}
,得到的段将是{min(A,C),max(B,D)}
要求您确定第一个管段的预期中等长度(即达到小于任何其他管段高度后)。如果此答案是一个有理数U/V
,则要求您确定X
,以便X*V=U(mod 10^9+7)
限制:
0
0
N≤ 100000
时间:2.5秒
内存:32768 KB
输入在第一行包含
N
,然后在下面的N
行中有4个整数:Left,Right,p,Q,
表示i
-第[Left,Right]
段,概率p/Q
与下降段重新结合。
例如:
答案大约是49.813963
想法1 最后一段的长度为R-L,其中R是右端的位置,L是左端的位置 期望是一个线性运算,所以 E(长度)=E(R)-E(L) 我们可以分别计算E(R)和E(L),然后将结果合并 想法2 我们可以迭代计算左端位置的PDF 它开始于第一段的左端(左[1]),概率为1 当它经过段i时,如果左端在左[i]和右[i]之间,将发生有趣的碰撞。我们将有趣的碰撞定义为影响左端位置的碰撞 这里的关键点是,如果我们需要知道右端的当前位置以确定是否存在碰撞,那么这不是一个有趣的碰撞!这是因为如果我们需要知道右端,那么线段i必须完全位于起点的右侧,因此它不会影响左边缘的位置 因此,为了更新PDF,我们收集了左[i]和右[i]之间的所有概率质量,乘以碰撞概率,并将结果添加到左[i]。(这些位置的现有质量按碰撞概率缩小。) 想法3 目前我们有一个O(n^2)算法,由O(n)的n次迭代组成,用于计算和修改每个范围内的质量
但是,我们可以使用数据结构(如a)来允许我们在O(logn)时间内执行每次迭代,总时间复杂度为O(nlogn)。您尝试过这个问题吗?你有任何代码吗?我只考虑过它,所以没有代码,除了暴力手段,我没有任何有价值的想法。预期的中等长度意味着什么?它只是长度的期望值吗?我不这么认为,不,否则它不会说中等。加上点的位置是由整数决定的。在这个例子中,答案是一个有理数aprox。49.81,预计没有一段会那么长。我认为这是所有预期长度乘以各自结果概率的算术平均数。
input:
5
35 64 58 873
41 70 407 729
18 90 165 628
10 57 33 104
60 69 152 466
output:
779316733