这里写自定义目录标题
更多精彩内容
这里是带你游历编程世界的Dashcoding编程社,我是Dash/北航硕士/ICPC区域赛全国排名30+/给你呈现我们眼中的世界!
256题算法特训课,帮你斩获大厂60W年薪offer
原题
2024ICPC网络赛第二场真题-游戏
B站动画详解
问题分析
Alice 和 Bob 正在进行一场游戏,游戏的规则如下:
-
初始筹码:
- Alice 拥有 n n n 个筹码。
- Bob 拥有 m m m 个筹码。
-
每一轮的结果:
- Alice 赢:
- 概率: p 0 = a 0 a 0 + a 1 p_0 = \frac{a_0}{a_0 + a_1} p0=a0+a1a0
- 操作:
- 如果 Alice 的筹码 n n n 大于或等于 Bob 的筹码 m m m,Alice 赢得整个游戏。
- 否则,Bob 失去 Alice 当前的筹码数,即 m = m − n m = m - n m=m−n。
- Bob 赢:
- 概率: p 1 = a 1 a 0 + a 1 p_1 = \frac{a_1}{a_0 + a_1} p1=a0+a1a1
- 操作:
- 如果 Bob 的筹码 m m m 大于或等于 Alice 的筹码 n n n,Bob 赢得整个游戏。
- 否则,Alice 失去 Bob 当前的筹码数,即 n = n − m n = n - m n=n−m。
- 平局:
- 概率: 1 − p 0 − p 1 1 - p_0 - p_1 1−p0−p1(根据题目提示,这部分可以忽略,因为题目中提到平局无效,我们可以将其视为游戏状态不变)。
- Alice 赢:
-
目标:
- 计算 Alice 最终赢得整个游戏的概率,结果需对 998244353 998244353 998244353 取模。
思路分析
核心思路
问题的关键在于模拟 Alice 和 Bob 之间的筹码变动过程,并计算 Alice 最终赢得整个游戏的概率。由于每一轮的结果依赖于当前的筹码状态,我们可以使用递归或动态规划的方法来解决。
递归关系
设 f ( n , m ) f(n, m) f(n,m) 表示在 Alice 拥有 n n n 个筹码,Bob 拥有 m m m 个筹码的状态下,Alice 赢得整个游戏的概率。那么:
f ( n , m ) = p 0 ⋅ f ( n , m − n ) + p 1 ⋅ f ( n − m , m ) f(n, m) = p_0 \cdot f(n, m - n) + p_1 \cdot f(n - m, m) f(n,m)=p0⋅f(n,m−n)+p1⋅f(n−m,m)
其中:
- 如果 Alice 赢得一轮(概率 p 0 p_0 p0),则 Bob 失去 n n n 个筹码,新的状态为 ( n , m − n ) (n, m - n) (n,m−n)。
- 如果 Bob 赢得一轮(概率 p 1 p_1 p1),则 Alice 失去 m m m 个筹码,新的状态为 ( n − m , m )