[51nod 1444]打字的猴子

一、题目

在这里插入图片描述

二、解法

考虑 d p dp ,设 E [ i ] E[i] 为已经成功匹配到了 i i ,想要匹配到 n n 的期望,那么答案就是 E [ 0 ] E[0] ,考虑多匹配一个字符后的影响,我们用 t r a n s trans 来描述它,转移如下:
E [ x ] = 1 k i = 1 k E [ t r a n s [ x ] [ i ] ] + 1 E[x]=\frac{1}{k}\sum_{i=1}^k E[trans[x][i]]+1 由于 t r a n s trans 并不是一定比 x x 小,需要高斯消元,时间复杂度 O ( n 3 ) O(n^3)


考虑优化,考虑 t r a n s trans 的性质,很重要的一点是 x x f a i l [ x ] fail[x] t r a n s trans 除了 s [ x + 1 ] s[x+1] 这一项(可以匹配),其它的值都是一模一样的,我们可以据此列出恒等式:
E [ x ] E [ f a i l [ x ] ] = E [ t r a n s [ x ] [ s [ x + 1 ] ] ] × 1 k E [ t r a n s [ f a i l [ x ] ] [ s [ x + 1 ] ] × 1 k E[x]-E[fail[x]]=E[trans[x][s[x+1]]]\times\frac{1}{k}-E[trans[fail[x]][s[x+1]]\times\frac{1}{k} E [ x ] E [ f a i l [ x ] ] = E [ x + 1 ] × 1 k E [ f a i l [ x + 1 ] ] × 1 k E[x]-E[fail[x]]=E[x+1]\times\frac{1}{k}-E[fail[x+1]]\times\frac{1}{k} 我们设 G ( x ) = E ( x ) E ( f a i l [ x ] ) G(x)=E(x)-E(fail[x]) ,那么上式可以化简成:
G ( x ) = G ( x + 1 ) × 1 k G(x)=G(x+1)\times \frac{1}{k} G G 其实是有边界的, G ( 1 ) = E ( 1 ) E ( 0 ) = k G(1)=E(1)-E(0)=-k ,那么 G ( x ) = k x G(x)=-k^x ,于是 G ( n ) = E ( n ) E ( f a i l ( n ) ) = k n G(n)=E(n)-E(fail(n))=-k^n ,由于 E ( n ) = 0 E(n)=0 ,所以 E ( f a i l [ n ] ) = k n E(fail[n])=k^n E ( f a i l [ f a i l [ n ] ] ) = k n + k f a i l [ n ] E(fail[fail[n]])=k^n+k^{fail[n]} ,以此类推即可得到答案 E ( 0 ) E(0)

咕咕咕
发布了217 篇原创文章 · 获赞 12 · 访问量 5154

猜你喜欢

转载自blog.csdn.net/C202044zxy/article/details/104056254
今日推荐