日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

UVA11019 Martix Matcher --- AC自动机

發(fā)布時(shí)間:2024/4/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UVA11019 Martix Matcher --- AC自动机 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

UVA11019 Martix Matcher

題目描述:

給定一個(gè)\(n*m\)的文本串

問(wèn)一個(gè)\(x*y\)的模式串出現(xiàn)的次數(shù)

?

AC自動(dòng)機(jī)的奇妙使用

將\(x*y\)的模式串拆分成x個(gè)串,當(dāng)x個(gè)串在同時(shí)被匹配時(shí),認(rèn)為原串被匹配

但是要區(qū)分匹配的行的差別,因此額外的附加一個(gè)二維數(shù)組\(cnt\)來(lái)表示匹配情況

記\(cnt(i,j)\)表示以\((i,j)\)為左上角的大小為\(x*y\)矩陣匹配了多少行。

將模式串拆成x個(gè)串,建成AC自動(dòng)機(jī)

把文本串的n行放進(jìn)去分別匹配,當(dāng)枚舉到文本串中的第i行第j個(gè)字符時(shí),

如果匹配上了模式串中第k行,那么\(cnt(i - k, j - y + 1) +1\)

最后的答案即為\(\sum_{i=0}^{n-1} \sum_{j=0}^{m-1} [cnt(i,j)==x]\)

?

復(fù)雜度O(\(T(n*m+x*y)\))

?

但是,本題很坑

1.模式串可能有相同的兩行,盡管模式串行結(jié)尾的fail指針不會(huì)互指,但是這種情況下要用鏈表儲(chǔ)存

2.每次清AC自動(dòng)機(jī)不要整個(gè)全部清,會(huì)帶來(lái)極大的復(fù)雜度

3.盡量不要以1作為下標(biāo),討論將變得很復(fù)雜

4.哈希的常數(shù)更優(yōu)

5.本題卡常,如果過(guò)不去,考慮哈希

?

代碼在此

轉(zhuǎn)載于:https://www.cnblogs.com/reverymoon/p/8882299.html

總結(jié)

以上是生活随笔為你收集整理的UVA11019 Martix Matcher --- AC自动机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。