bzoj 4820: [Sdoi2017]硬币游戏 概率dp+高斯消元+KMP

这篇博客探讨了一场有趣的硬币游戏,参与者猜测硬币序列,当某个猜测的序列出现时游戏结束。题目要求计算在硬币正反面概率相等的情况下,每个同学获胜的概率。博主分析了问题,指出传统的AC自动机和高斯消元方法因复杂度过高而不可行,进而提出使用KMP预处理后缀影响,并结合高斯消元求解正确答案的方法。
摘要由CSDN通过智能技术生成

题意

周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利。
大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了。
同学们觉得要加强趣味性,所以要找一个同学扔很多很多次硬币,其他同学记录下正反面情况。
用 H 表示正面朝上, 用 T 表示反面朝上,扔很多次硬币后,会得到一个硬币序列。比如HTT 表示第一次正面朝上,后两次反面朝上。
但扔到什么时候停止呢?大家提议,选出 n n n 个同学, 每个同学猜一个长度为 m m m 的序列,当某一个同学猜的序列在硬币序列中出现时,就不再扔硬币了,并且这个同学胜利。为了保证只有一个同学胜利,同学们猜的 n n n 个序列两两不同。
很快,n n n个同学猜好序列,然后进入了紧张而又刺激的扔硬币环节。你想知道,如果硬币正反面朝上的概率相同,每个同学胜利的概率是多少。
1<=n,m<=300

分析

一个十分显然的想法是建AC自动机dp然后高斯消元,但这样的话节点数是O(n^2)的,显然不能接受。
正解十分的牛逼,设变量 xi 表示第一个匹配到的目标串是第i个串的概率,多设一个变量 N 表示一个目标串都匹配不到的随机串的期望长度。
A=TTH,B=HTT p(N

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值