1. 程式人生 > >[SDOI2017]硬幣遊戲

[SDOI2017]硬幣遊戲

題意

給你一個字串集

構造一個01S,每個位置等概率的插入01

問字串集中每個字串最先出現在構造的串中的概率

題解

TLE原因在於方程個數的nm的,這樣顯然是不行的

考慮到合法狀態其實只有n,其餘的狀態可以合併成一個狀態——”不合法的狀態”

如果能這樣列出方程,那麼複雜度就是O(n3)是可以接受的

S為一種不合法的狀態(即沒人贏),A=101,B=110

引理:構造出一個長的l特定01串的概率是12l

S+101狀態一定會停止遊戲,但不一定要等到101加完才停止

如果S的字尾是

1或者10那麼就會提前結束

也就是說可能會有這些情況

S101=(S+A)+(S+A+01)+(S+B+1)

其中S=S+10=S+1

根據上面的引理,可以得到方程18S=(1+14)A+12B

也就是說對與每一個S+xi,len(xi)=m

如果xj存在長度為a的字尾能匹配xi的字首,那麼就有12ma的概率提前結束

prea,xi表示xi長度為a的字首,字尾同理

寫成通式就是

xi+j=1na=1m[prea,xi=sufa,xj]12maxj=12mS

這樣我們就只有n+1個方程了

最後再把其中一個方程替換為