Article Index

洛谷 P5249 [LnOI2019] 加特林轮盘赌 做题笔记

Published on

题意

由于题目比较搞笑,就不简述题意了,大家自己看看吧(

加特林轮盘赌是一个养生游戏。

与俄罗斯轮盘赌等手枪的赌博不同的是,加特林轮盘赌的赌具是加特林。

加特林轮盘赌的规则很简单:在加特林的部分弹夹中填充子弹。游戏的参加者坐在一个圆桌上,轮流把加特林对着自己的头,扣动扳机一秒钟。中枪的自动退出,坚持到最后的就是胜利者。

我们使用的是 2019 年最新技术的加特林,他的特点是无需预热、子弹无限,每一个人,在每一回合,中枪的概率是完全相同的 $P_0$。

每局游戏共有 $n$ 只长脖子鹿,从 1 长脖子鹿开始,按照编号顺序从小到大进行游戏,绕着圆桌不断循环。

游戏可能会循环进行多轮,直到场上仅剩下最后一只长脖子鹿时,游戏结束。

给出 $P_0$ 和 $n$,询问 $k$ 号长脖子鹿最终成为唯一幸存者的概率 $P_k$。

如果 $P_0=0$,我们认为胜者为 $1$ 号。

$1 \le k \le n \le 10^{4}, 0 \le P_0 \le 1$。

题解

这题最关键的一点是搞清楚只有两个人的情况。

如果第一个人以 $P_0$ 的概率被崩了,那么第二个人就赢了。如果第一个人以 $\left(1 - P_0\right)$ 的概率没被崩,那么此时相当于两人交换了位置。

设 $f_{n, i}$ 表示有 $n$ 个人时,第 $i$ 个人最终幸存的概率。

显然 $f_{2, 1} = \left(1 - P_0\right) \times f_{2, 2}$,而所有人的最终幸存的概率之和应该为 $1$,因此 $f_{2, 1} + f_{2, 2} = 1$,于是可以解出它们。

现在假设有 $n$ 个人,按照两个人的情况扩展:
$f_{n, 1} = \left(1 - P_0\right) \times f_{n, n}$ 且 $\sum\limits_{i = 1}^nf_{n, i} = 1$。

我们还需要几个式子才能解方程。现在考虑一下递推关系:

如果第一个玩家以 $P_0$ 的概率被崩,那么局面变为 $f_{n - 1, k - 1}$。

否则第一个玩家以 $\left(1 - P_0\right)$ 的概率没被崩,那么局面变为 $f_{n, k - 1}$。

因此:$f_{n, k} = P_0 \times f_{n, k - 1} + \left(1 - P_0\right) \times f_{n - 1, k - 1}$

这样我们就有 $n$ 个方程了,手动解方程即可达到 $\mathcal O\left(n^2\right)$ 的复杂度。


No comments

Post a comment