题意
周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利。
大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了。
同学们觉得要加强趣味性,所以要找一个同学扔很多很多次硬币,其他同学记录下正反面情况。
用 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 表示一个目标串都匹配不到的随机串的期望长度。
设