【题解】船长 HDU - 7827
船长 HDU - 7827
题目
N个人打擂台赛,对于任意一场比赛,p_0一定能击败除了特殊的k名选手以外的所有选手,而其他的比赛一定是1/2的概率获胜。
求p_0在比赛过程中特殊的k名选手都不遇见的情况的概率。
暴力
我们自然的想到了模拟整个过程
设f_i为现在第i个人是特殊的k个人之一的概率
将k个人设为1,其余设为0
那么记赢家i' 那么 f_i'= (f_i + f_j) / 2
这样的复杂度是O(n*N)的因为是模拟了n轮,每轮有N个人,在N=2^n且n可以到60的题目上显然不可做
正解
我们注意到对于计算若i不是特殊的k个选手的话是不会对答案作出贡献的
所以只模拟k个特殊的就行了
也就是我们可以只追踪这 k 个人,看他们每轮晋级的概率。
因为k<1e5所以复杂度可行
我们再来模拟
假设w为特殊的选手(p_0)
分类讨论
若x遇到p_0:
x必须输掉,所以答案乘以1/2,x不进入下一轮
若x遇到另一个特殊选手y:
两者必有一个晋级,晋级概率为 (P_x + P_y) / 2,新编号为 x>>1
若x遇到普通人:
x有1/2概率赢,所以 P_x /= 2,新编号为 x>>1
若x轮空(当前人数为奇数时最后一人):
x直接晋级,概率不变,新编号为 x>>1
每次更新这一轮留下的点的编号和概率,模拟n轮。
可以把编号都减一,这样两个比赛的人的编号异或1就是另一个人的编号,便于维护。

浙公网安备 33010602011771号