国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

|算法討論|AC自動(dòng)機(jī) 學(xué)習(xí)筆記

2019-11-11 03:48:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

在學(xué)習(xí)AC自動(dòng)機(jī)之前需要熟練掌握WA自動(dòng)機(jī)、RE自動(dòng)機(jī)與TLE自動(dòng)機(jī)

模板題:Hdu 2222 KeyWords Search,解決先給出關(guān)鍵字后,再給出尋找文本進(jìn)行匹配問題

#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #define ms(i,j) memset(i,j, sizeof i); using namespace std;const int MAXN = 10000 + 5, _SIZE = 26; int n;struct acam{ int sz;//結(jié)點(diǎn)編號(hào) int res; int ch[MAXN*51][_SIZE];//Tire int last[MAXN*51];//后綴鏈接 int f[MAXN*51];//失配函數(shù) int val[MAXN*51][2];//結(jié)點(diǎn)的權(quán)值 bool used[MAXN*51];//用過 void init()//初始化 { ms(val,0); ms(ch,0); ms(used,false); sz = 1; res = 0; } void insert(char *s, int v)//插入一個(gè)模板 { int u = 0; int len = strlen(s); for (int i=0;i<len;i++) { int c = s[i] - 'a'; if (ch[u][c]) { u = ch[u][c]; } else { ch[u][c] = ++sz; u = ch[u][c]; } if (i==len-1) { val[u][0] = v; val[u][1]++; } } } void g(int j)//遞歸更新cnt { if (j&&!used[val[j][0]]) { res+=val[j][1]; used[val[j][0]] = true; g(last[j]); } } void find(char *T)//在T中匹配 { int len = strlen(T); int j = 0; for (int i=0;i<len;i++) { int c = T[i] - 'a'; j = ch[j][c]; if (val[j][0]) g(j); else if (last[j]) g(last[j]); } } void getFail()//獲得失配函數(shù) { queue<int> q; f[0] = 0; for (int c=0;c<_SIZE;c++)//初始化進(jìn)隊(duì) { int u = ch[0][c]; if (u) { q.push(u); f[u] = 0; last[u] = 0; } } while (!q.empty()) { int r = q.front(); q.pop(); for (int c=0;c<_SIZE;c++) { int u = ch[r][c]; if (!u) { ch[r][c] = ch[f[r]][c]; continue; } q.push(u); int j = f[r]; while (j&&!ch[j][c]) j = f[j]; f[u] = ch[j][c]; last[u] = (val[f[u]][0]) ? (f[u]) : (last[f[u]]); } } } }ac;char s[1000000 + 5];int main() { int kase; scanf("%d", &kase); while (kase--) { ac.init(); scanf("%d", &n); for (int i=1;i<=n;i++) { scanf("%s", s); ac.insert(s,i); } scanf("%s", s); ac.getFail(); ac.find(s);
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 剑河县| 亚东县| 新兴县| 常德市| 兴义市| 拜城县| 连平县| 南投县| 偃师市| 绥宁县| 宜城市| 巩义市| 宜春市| 隆尧县| 克拉玛依市| 阳谷县| 建湖县| 宜兰县| 长宁县| 三台县| 大丰市| 津市市| 隆回县| 荔波县| 汉阴县| 长子县| 上杭县| 胶南市| 南城县| 灯塔市| 通州市| 泰兴市| 龙泉市| 平和县| 呼玛县| 三原县| 莫力| 瑞金市| 昌江| 连平县| 长垣县|