【题解】[CTSC2006]歌唱王国
[CTSC2006]歌唱王国
$T$ 组询问,每次给出长度为 $m$ 的序列 $a$。
现在你将生成一个随机序列,字符集为 $1-n$,每次在序列末尾等概率随机一个数。当 $a$ 成为了随机序列中的一个连续子序列则结束随机。
询问随机序列的期望长度。
$1\le T\le 50, 1\le n,m\le 10^5$。
$\text{Solution:}$
$\text{PGF}$ 入门题。
设 $F(z)$ 表示一个离散随机变量 $X(X\in \mathbb{N})$ 的概率生成函数,若令 $P_{X=i}$ 表示随机变量 $X$ 取 $i$ 的概率,那么:
$$ F(z)=\sum_{i} P_{X=i}z^i $$
与大部分其他生成函数不同的一点是,$\text{PGF}$ 虽然是生成函数,但是其特殊点值实际上是有意义的。例如:
$$ F(1)=\sum_{i} P_{X=i}=1 $$
同时,不难发现该随机变量的期望是:
$$ \sum_{i} P_{X=i}\times i $$
这个东西可以直接对 $\text{PGF}$ 进行一次求导:
$$ F'(z)=\sum_{i=1} i\times P_{X=i}z^{i-1} $$
那么 $E(X)=F'(1)$,实际上就是在用带入点值消去 $z$。而 $F^{(k)}(1)=E(X^{\underline{k}})$,也就是 $F$ 的 $k$ 阶导可以求 $X$ 的下降幂的期望值。
考虑本题。令 $f_n$ 表示恰好在序列长为 $n$ 时结束的概率,那么其 $\text{PGF}$ $F(z)$ 的一阶导 $z=1$ 处的点值就是序列长度的期望;$g_n$ 表示序列长为 $n$ 时仍未结束的概率,其 $\text{PGF}$ 为 $G(z)$。
$g_n$ 实际就是序列长度 $>n$ 的概率,那么考虑建立两者之间的关系:不妨考虑序列长度 $\ge n$ 的概率,显然是 $f_n+g_n=g_{n-1}$,因为 $\text{len}>n-1\leftrightarrow \text{len}\ge n$。
因此有等式:
$$ F(z)+G(z)=zG(z)+1 $$
也就是把 $G$ 进行一个平移,让 $g_{n-1}$ 到第 $n$ 项的位置。考虑到要求 $F'(1)$,所以先两边求导:
$$ F'(z)+G'(z)=zG'(z)+G(z) $$
那么:
$$ F'(1)+G'(1)=G'(1)+G(1) $$
这里又因为 $z=1$ 而巧妙地将一个 $z$ 消掉了。因此 $F'(1)=G(1)$,只需要求 $G(1)$ 即可。
考虑从另一个角度建立 $F,G$ 的关系,考虑什么时候会结束。如果我们要求必定结束,但是不一定是第一次出现就结束,那么有这样一个柿子:
$$ G(z)\times \Big(\dfrac{z}{n}\Big)^m $$
也就是在当前序列后面直接接上一个需要匹配的串。这一定能保证加数结束。但是我们可能算多了,因为可能在填满这个串之前就已经完成匹配了。接着又是一个 $\text{trick}$:
此处不直接考虑删除 $G$ 中的贡献,而是对 $F$ 进行类似的变换,得到具有同样意义的 $\text{PGF}$。
那就对 $F$ 做类似的东西。不难发现,若 $G$ 中提前结束了,那么在结束之后填多的东西恰好是匹配串的一个 $\text{border}$。不妨设 $s_i=[\text{1-i 是匹配串的一个 border}]$,那么有:
$$ G(z)\times \Big(\dfrac{z}{n}\Big)^m=\sum_{i=1}^m s_i F(z)\Big(\dfrac{z}{n}\Big)^{m-i} $$
也就是枚举在哪里就提前结束了,然后把后面多填的填上。这样等式两边就具有了一样的意义。
我们要求 $G(1)$,这柿子随便推推就得到:
$$ E(\text{len})=F'(1)=G(1)=\sum_{i=1}^m s_in^i $$
先做一遍 $\text{kmp}$ 求 $\text{border}$,然后快速幂即可。
$\text{Summary:}$
咕咕咕
6666