BZOJ-1009-GT考试-HNOI2008
生活随笔
收集整理的這篇文章主要介紹了
BZOJ-1009-GT考试-HNOI2008
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
描述
阿申準(zhǔn)備報(bào)名參加GT考試,準(zhǔn)考證號(hào)為N位數(shù)X1X2….Xn(0<=Xi<=9),他不希望準(zhǔn)考證號(hào)上出現(xiàn)不吉利的數(shù)字。他的不吉利數(shù)學(xué)A1A2…Am(0<=Ai<=9)有M位,不出現(xiàn)是指X1X2…Xn中沒(méi)有恰好一段等于A1A2…Am. A1和X1可以為0
分析
- f[i][j] 表示前i個(gè)數(shù)字里匹配到了j位
- 開(kāi)始想到一個(gè)很不完善的方程, f[i][j] = f[i-1][j-1], f[i][0] = sum{f[i-1]}
- 這樣肯定是不對(duì)的了, 因?yàn)閺膉-1不一定只能轉(zhuǎn)移到j(luò), 還有可能換一個(gè)數(shù)字后第j位不匹配了但跟原串的其他位還是匹配的.
- 所以要考慮從匹配到第j-1位的狀態(tài)可以轉(zhuǎn)移到哪些狀態(tài).
- 由此聯(lián)想到KMP里的失配函數(shù). 枚舉第j位的數(shù)字(0..9), 當(dāng)?shù)趈位失配后, 沿失配指針走直到和枚舉的數(shù)字相同或者失配指針來(lái)到0. 如果第k位重新匹配了, 說(shuō)明j狀態(tài)可以轉(zhuǎn)移到k狀態(tài), 即第j位放置模板串中第k位的數(shù)字.
- 當(dāng)然上面的描述有的地方不準(zhǔn)確因?yàn)闆](méi)有明確從0做下標(biāo)還是從1…
- 有了狀態(tài)轉(zhuǎn)移方程就可以用矩陣乘法來(lái)快速求解. O(m^3 * log(n))
- 根據(jù)矩陣乘法的性質(zhì)算算看怎么建立矩陣.
代碼
https://code.csdn.net/snippets/622317
總結(jié)
以上是生活随笔為你收集整理的BZOJ-1009-GT考试-HNOI2008的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ-3505-数三角形-CQOI2
- 下一篇: BZOJ-1857-传送带-SCOI20