传送门
description
次询问,每次给定 ,总共 局游戏,每局 A 有 的概率获胜。一局游戏获胜 A 的得分加 1,否则减 1,但是如果 A 在得分为 0 的情况下输了一局,得分不变。求 A 赢 局,输 局后游戏结束时 A 的得分的数学期望。
solution
首先发现 是诈骗的,由于 是已知的,一个的游戏方案的概率就是 ,只需要算出所有游戏方案的最终得分和即可。
根据游戏规则,如果 A 在得分为 0 的情况下输,得分不变,我们称一局这样的情况为免疫。
如果整场游戏中 A 免疫了 次(显然 ),那么 A 的最终得分就是 。于是我们可以对于每种免疫次数计算方案数。
先来考虑免疫 0 次的方案数计算。
把游戏过程当做 01 序列,0 表示 A 获胜,1 表示 A 输。则要求任意前缀中 1 的个数要小于等于 0 的个数。
先来算不合法的方案,构造双射:设序列前 个数中 0 的数量为 ,1 的数量为 ,找到第一个 的位置,则一定有 ,再将该位置(不包含)后面的所有 01 取反,得到一个含 个 0, 个 1 的序列;反过来,任意一个含 个 0, 个 1 的序列也对应一个不合法的序列。所以不合法的序列的方案数就是 。合法的序列方案数就是 。
同理,考虑免疫 次的方案数。依然是用 01 序列考虑,那么方案数是否就是任意前缀中 1 的个数都要小于等于 加 0 的个数的方案数呢?需要注意,我们应该求恰好免疫 次的方案数,而这样算出的是至多免疫 次的方案数,还要减去至多免疫 次的方案数,为 。
需要注意 时方案数是 0,按照上面的方式构造是有问题的,所以 至少为 。
综上,得分和就是 。
开始推式子。
前面的系数里的 是常数,提出来。
变成计算 和 。前者就等于 ,可直接计算;后者等于 。右边这个就是 。
问题转化成了多次询问,求组合数前缀和。考虑莫队。
设 。
有转移:
第一个转移显然,第二个转移可以根据组合恒等式 得出。
时间复杂度线性乘根号。
code
读者实现不难
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】