傳送門:
題目大意:
給你乙個匹配文字,給你若干個模式串詢問。有些可以重疊匹配,有些不能重疊匹配。對於每個詢問求在匹配文字**現的次數 。
題目思路:
可重複匹配的串很簡單,就直接跑ac自動機。
對於不重疊匹配的串,貪心的能匹配就匹配。對映到ac自動機上就是當當前節點節點x上一次匹配的位置與現在匹配的位置之差 大於等於 該匹配串的長度時,就能夠完成不重疊即可。挺水一道題.
#include
using
namespace std;
const
int maxn =
6e5+5;
const
int maxm =
1e5+4;
char tmp[8]
;int n , ans[maxm]
, last[maxm]
, flag[maxm]
, pos[maxm]
;char s[maxm]
;namespace ac
}int add (
char
* s)
return u;
} queue<
int>q;
void build (
)else}}
}void ask (
char
*t)}
}return;}
}int
main()
ac::
build()
; ac::
ask(s)
;printf
("case %d\n"
,++t)
;for
(int i =
1; i <= m ; i++
)printf
("%d\n"
, ac::cnt[flag[i]
][pos[i]])
;printf
("\n");
}return0;
}
AC自動機專題
ac自動機兩大題型 查詢字串 建立有向圖dp 常數較大串數較少需要矩陣快速冪 ac自動機學習 18.10.1 hdu2222 keywords search 給定n個單詞和1個句子,求句子中不同單詞的個數 includeusing namespace std const int max 1e6 5 ...
ac自動機 匹配最長字首 多模匹配 AC自動機
精確的字串匹配演算法有 單模匹配演算法,比如,kmp bm演算法等 和 多模匹配演算法,比如,wu manber ac演算法等。ac演算法 aho corasick 是kmp演算法向多模式串情形的擴充套件,該演算法使用一種特殊的自動機,即ac自動機。ac自動機由一組模式串p生成,是trie的擴充套件...
ac自動機 匹配最長字首 高階 AC自動機詳解
今天我們來介紹一點高階的知識 ac自動機。ac自動機是什麼呢?是不是用了這個演算法,不管什麼題目都會自動ac呢?別做夢啦 ac自動機,是aho corasick automaton的簡稱,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法。ac自動機是對字典樹演算法的一種延伸,是字串中運用...