D e s c r i p t i o n D e s c r i p t i o n
Link .
一个游戏包含若干次卡牌抽取,每次以 p l p l 的概率得到 + 1 + 1 ,p d p d 的概率得到 − 1 − 1 ,否则得到 0 0 ,操作后以 p p 的概率结束游戏,求每次抽取后,满足 + 1 + 1 数量大于 − 1 − 1 数量的抽取轮数的期望值。不取模。
0 < p ≤ 1 0 < p ≤ 1 ,0 ≤ p l , p d , p l + p d ≤ 1 0 ≤ p l , p d , p l + p d ≤ 1 。
S o l u t i o n S o l u t i o n
我请愿为Tiw 太阳神教 的教徒。(
令 p e = 1 − p l − p r p e = 1 − p l − p r ,表示得到 0 0 的概率。我们直接从答案 A A 入手:
A = ∑ l > d ≥ 0 , e ≥ 0 ( l + d + e l , d , e ) p l l p d d p e e ( 1 − p ) l + d + e − 1 , A = ∑ l > d ≥ 0 , e ≥ 0 ( l + d + e l , d , e ) p l l p d d p e e ( 1 − p ) l + d + e − 1 ,
即枚举一个抽取后(不一定结束)的状态。此后,把 ( 1 − p ) ( 1 − p ) 的指数分配到其余三个因子上,令
⎧ ⎪ ⎨ ⎪ ⎩ p ′ e = p e ( 1 − p ) p ′ l = p l ( 1 − p ) p ′ d = p d ( 1 − p ) , { p e ′ = p e ( 1 − p ) p l ′ = p l ( 1 − p ) p d ′ = p d ( 1 − p ) ,
带入 A A ,同时发现 e e 的限制较少,所以单独枚举 e e ,有
A = 1 1 − p ∑ l > d ≥ 0 , e ≥ 0 ( l + d + e l , d , e ) p ′ e e p ′ d d p ′ l l = 1 1 − p ∑ l ≥ d ≥ 0 ( l + d d ) p ′ l l p ′ d d ∑ e ≥ 0 ( l + d + e e ) p ′ e e . A = 1 1 − p ∑ l > d ≥ 0 , e ≥ 0 ( l + d + e l , d , e ) p e ′ e p d ′ d p l ′ l = 1 1 − p ∑ l ≥ d ≥ 0 ( l + d d ) p l ′ l p d ′ d ∑ e ≥ 0 ( l + d + e e ) p e ′ e .
最后的级数形如 ∑ i ≥ 0 ( i + t i ) x i = 1 ( 1 − x ) t ∑ i ≥ 0 ( i + t i ) x i = 1 ( 1 − x ) t ,当 p e = 1 p e = 1 时认为 1 0 0 = 1 1 0 0 = 1 ,即任意 p e p e 在这个 GF 的收敛域中,可以直接带入。所以
A = 1 1 − p ∑ l > d ≥ 0 ( l + d d ) p ′ l l p ′ d d 1 ( 1 − p ′ e ) l + d + 1 . A = 1 1 − p ∑ l > d ≥ 0 ( l + d d ) p l ′ l p d ′ d 1 ( 1 − p e ′ ) l + d + 1 .
按照先前的套路分配指数,再令
⎧ ⎪ ⎨ ⎪ ⎩ p ′′ l = p ′ l 1 − p ′ e p ′′ d = p ′ d 1 − p ′ e , { p l ″ = p l ′ 1 − p e ′ p d ″ = p d ′ 1 − p e ′ ,
代入整理,得到
A = 1 ( 1 − p ) ( 1 − p ′ e ) ∑ l > d ≥ 0 ( l + d d ) p ′′ l l p ′′ d d . A = 1 ( 1 − p ) ( 1 − p e ′ ) ∑ l > d ≥ 0 ( l + d d ) p l ″ l p d ″ d .
我们固定 l l ,挑出此时 d d 的和式来研究,记
S d ( l ) = ∑ 0 ≤ d < l ( l + d d ) p ′′ d d . S d ( l ) = ∑ 0 ≤ d < l ( l + d d ) p d ″ d .
错位相减,左右乘 ( 1 − p ′′ d ) ( 1 − p d ″ ) ,对齐求和指标 d d 以化简,最终得到
( 1 − p ′′ d ) S d ( l ) = S d ( l − 1 ) + ( 2 ( l − 1 ) l − 1 ) p ′′ l − 1 d − ( 2 l − 1 l − 1 ) p ′′ l d . ( 1 − p d ″ ) S d ( l ) = S d ( l − 1 ) + ( 2 ( l − 1 ) l − 1 ) p d ″ l − 1 − ( 2 l − 1 l − 1 ) p d ″ l .
令 a l = ( 2 ( l − 1 ) l − 1 ) p ′′ l − 1 d − ( 2 l − 1 l − 1 ) p ′′ l d a l = ( 2 ( l − 1 ) l − 1 ) p d ″ l − 1 − ( 2 l − 1 l − 1 ) p d ″ l ,自然得到
S d ( l ) = l ∑ i = 0 a i ( 1 − p ′′ d ) l − i + 1 . S d ( l ) = ∑ i = 0 l a i ( 1 − p d ″ ) l − i + 1 .
代回 A A ,交换求和指标并分配 ( 1 − p ′′ d ) l − i + 1 ( 1 − p d ″ ) l − i + 1 的指数:
A = 1 ( 1 − p ) ( 1 − p ′ e ) ∑ l ≥ 0 p ′′ l l l ∑ i = 1 a i ( 1 − p ′′ d ) l − i + 1 = 1 ( 1 − p ) ( 1 − p ′ e ) ∑ i ≥ 1 a i ( 1 − p ′′ d ) − i + 1 ∑ l ≥ i ( p ′′ l 1 − p ′′ d ) l . A = 1 ( 1 − p ) ( 1 − p e ′ ) ∑ l ≥ 0 p l ″ l ∑ i = 1 l a i ( 1 − p d ″ ) l − i + 1 = 1 ( 1 − p ) ( 1 − p e ′ ) ∑ i ≥ 1 a i ( 1 − p d ″ ) − i + 1 ∑ l ≥ i ( p l ″ 1 − p d ″ ) l .
注意到最后的级数是等比数列求和,先考虑它的收敛性:
1 − p ′′ d − p ′′ l = 1 − ( 1 − p ) p d + ( 1 − p ) p l 1 − ( 1 − p ) p e = 1 − ( 1 − p ) p e − ( 1 − p ) p d − ( 1 − p ) p l 1 − ( 1 − p ) p e = p 1 − ( 1 − p ) p e > 0. 1 − p d ″ − p l ″ = 1 − ( 1 − p ) p d + ( 1 − p ) p l 1 − ( 1 − p ) p e = 1 − ( 1 − p ) p e − ( 1 − p ) p d − ( 1 − p ) p l 1 − ( 1 − p ) p e = p 1 − ( 1 − p ) p e > 0.
收敛啦。不妨令 q = p ′′ l 1 − p ′′ d q = p l ″ 1 − p d ″ ,整理式子:
A = 1 ( 1 − p ) ( 1 − p ′ e ) ∑ i ≥ 1 a i ( 1 − p ′′ e ) − i + 1 ⋅ q i 1 − q = 1 ( 1 − p ) ( 1 − p ′ e ) ( 1 − q ) ∑ i ≥ 1 q i { ( 2 ( i − 1 ) i − 1 ) [ p ′′ d ( 1 − p ′′ d ) ] i − 1 − p ′′ d ( 2 i − 1 i − 1 ) [ p ′′ d ( 1 − p ′′ d ) ] i − 1 } = q ( 1 − p ) ( 1 − p ′ e ) ( 1 − q ) ∑ i ≥ 1 [ ( 2 ( i − 1 ) i − 1 ) ( p ′′ d p ′′ l ) i − 1 − p ′′ d ( 2 i − 1 i − 1 ) ( p ′′ d p ′′ l ) i − 1 ] . A = 1 ( 1 − p ) ( 1 − p e ′ ) ∑ i ≥ 1 a i ( 1 − p e ″ ) − i + 1 ⋅ q i 1 − q = 1 ( 1 − p ) ( 1 − p e ′ ) ( 1 − q ) ∑ i ≥ 1 q i { ( 2 ( i − 1 ) i − 1 ) [ p d ″ ( 1 − p d ″ ) ] i − 1 − p d ″ ( 2 i − 1 i − 1 ) [ p d ″ ( 1 − p d ″ ) ] i − 1 } = q ( 1 − p ) ( 1 − p e ′ ) ( 1 − q ) ∑ i ≥ 1 [ ( 2 ( i − 1 ) i − 1 ) ( p d ″ p l ″ ) i − 1 − p d ″ ( 2 i − 1 i − 1 ) ( p d ″ p l ″ ) i − 1 ] .
最后的最后,研究级数 ∑ i ≥ 0 ( 2 i i ) ∑ i ≥ 0 ( 2 i i ) 和 ∑ i ≥ 0 ( 2 i − 1 i ) ∑ i ≥ 0 ( 2 i − 1 i ) 。考虑到 Catalan 数的 GF:
C ( x ) = ∑ i ≥ 0 ( 2 i i ) i + 1 x i = 1 − ( 1 − 4 x ) 1 2 2 , C ( x ) = ∑ i ≥ 0 ( 2 i i ) i + 1 x i = 1 − ( 1 − 4 x ) 1 2 2 ,
利用位移和求导消掉分母,得到 F ( x ) = ∑ i ≥ 0 ( 2 i i ) x i F ( x ) = ∑ i ≥ 0 ( 2 i i ) x i 的封闭形式:
[ x C ( x ) ] ′ = [ 1 − ( 1 − 4 x ) 1 2 2 ] ′ = ( 1 − 4 x ) − 1 2 = F ( x ) . [ x C ( x ) ] ′ = [ 1 − ( 1 − 4 x ) 1 2 2 ] ′ = ( 1 − 4 x ) − 1 2 = F ( x ) .
接着用 F ( x ) F ( x ) 配凑出 G ( x ) = ∑ i ≥ 0 ( 2 i i + 1 ) x i G ( x ) = ∑ i ≥ 0 ( 2 i i + 1 ) x i ,结果是
G ( x ) = 1 − ( 1 − 4 x ) 1 2 2 x . G ( x ) = 1 − ( 1 − 4 x ) 1 2 2 x .
将结果代入 A A :
A = q ( 1 − p ) ( 1 − p ′ e ) ( 1 − q ) { ( 1 − 4 p ′′ d p ′′ l ) − 1 2 − 1 2 p ′′ l [ ( 1 − 4 p ′′ d p ′′ l ) − 1 2 − 1 ] } A = q ( 1 − p ) ( 1 − p e ′ ) ( 1 − q ) { ( 1 − 4 p d ″ p l ″ ) − 1 2 − 1 2 p l ″ [ ( 1 − 4 p d ″ p l ″ ) − 1 2 − 1 ] }
能直接 O ( 1 ) O ( 1 ) 计算啦。顺便检查一下 ( 1 − 4 p ′′ d p ′′ l ) ( 1 − 4 p d ″ p l ″ ) 能否开根。注意到 p ′′ d + p ′′ l ≤ 1 p d ″ + p l ″ ≤ 1 ,所以
p ′′ d p ′′ l ≤ ( p ′′ l + p ′′ r ) 2 4 ≤ 1 4 . p d ″ p l ″ ≤ ( p l ″ + p r ″ ) 2 4 ≤ 1 4 .
能开根,计算即可。注意特判 p = 1 p = 1 和 p l = 0 p l = 0 的情况(不然会爆 nan
qwq)。
C o d e C o d e
# include <cmath>
# include <cstdio>
# include <cassert>
# define rep ( i, l, r ) for ( int i = l, rep## i = r; i <= rep ## i; ++ i )
# define per ( i, r, l ) for ( int i = r, per## i = l; i >= per ## i; -- i )
const int N = 1e7 ;
double pl, pd, pe, p, f[ N + 5 ] , g[ N + 5 ] ;
inline void solve ( ) {
if ( p == 1 ) return void ( printf ( "%.12f\n" , pl ) ) ;
if ( pl == 0 ) return void ( printf ( "%.12f\n" , 0. ) ) ;
double c = pe * ( 1 - p ) ,
a = ( 1 - p ) * pl / ( 1 - c ) ,
b = ( 1 - p ) * pd / ( 1 - c ) ,
q = a / ( 1 - b ) , r = a * b,
u = 1 / sqrt ( 1 - 4 * r ) ;
printf ( "%.12f\n" , q / ( 1 - p ) / ( 1 - c ) / ( 1 - q )
* ( ! a || ! b ? 1 : ( u - b / ( 2 * r ) * ( u - 1 ) ) ) ) ;
}
int main ( ) {
freopen ( "augury.in" , "r" , stdin ) ;
freopen ( "augury.out" , "w" , stdout ) ;
int T;
scanf ( "%*d %d" , & T ) ;
while ( T-- ) {
scanf ( "%lf %lf %lf" , & pl, & pd, & p ) , pe = 1 - pl - pd;
solve ( ) ;
}
return 0 ;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现