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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关键词匹配(Ac自动机模板题)

發(fā)布時間:2025/3/15 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关键词匹配(Ac自动机模板题) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2772: 關(guān)鍵詞匹配

Time Limit:?1 Sec??Memory Limit:?128 MB
Submit:?10??Solved:?4
[Submit][Status][Web Board]

Description

給你N個單詞,然后給定一個字符串,問一共有多少單詞在這個字符串中出現(xiàn)過(輸入相同的字符串算不同的單詞,同一個單詞重復(fù)出現(xiàn)只計一次)。

Input

第一行一個整數(shù)N,表示給定單詞的個數(shù)。
接下來N行,每行輸入一個長度不超過50且全由小寫字母組成的單詞。
最后一行輸入一個長度不超過1000000的字符串。
N≤10000

Output

輸出一行包含一個整數(shù),表示共在給定字符串中出現(xiàn)過的單詞個數(shù)。

Sample Input

5 she he say shr her yasherhs ?

Sample Output

3

HINT

Source

?題解:

  裸Ac自動機,不會的可以去看看這個博客:http://www.cppblog.com/menjitianya/archive/2014/07/10/207604.html;

1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #define maxn 1000005 5 #define maxm 1000005 6 using namespace std; 7 int n,tot,head,tail,son[maxm][26],fai[maxm],sum[maxm],list[maxm]; 8 char s[maxn]; 9 void clear(){ 10 tot=0; 11 memset(son,0,sizeof(son)); 12 memset(sum,0,sizeof(sum)); 13 } 14 void insert(char *s){ 15 int p=0; 16 for (int i=1;s[i];p=son[p][s[i]-'a'],i++) if (!son[p][s[i]-'a']) son[p][s[i]-'a']=++tot; 17 sum[p]++; 18 } 19 void failed(){ 20 head=0,tail=1,list[1]=0,fai[0]=-1; 21 while (head!=tail){ 22 int x=list[++head]; 23 for (int ch=0;ch<26;ch++) 24 if (son[x][ch]){ 25 list[++tail]=son[x][ch]; 26 int p=fai[x]; 27 while (p!=-1&&!son[p][ch]) p=fai[p]; 28 if (p==-1) fai[son[x][ch]]=0; 29 else fai[son[x][ch]]=son[p][ch]; 30 } 31 } 32 } 33 void work(char *s){ 34 int ans=0; 35 for (int i=1,p=0;s[i];i++){ 36 while (p&&!son[p][s[i]-'a']) p=fai[p]; 37 p=son[p][s[i]-'a']; 38 for (int t=p;t;t=fai[t]) ans+=sum[t],sum[t]=0; 39 } 40 printf("%d\n",ans); 41 } 42 int main() 43 { 44 cin>>n;//,clear(); 45 for (int i=1;i<=n;i++) scanf("%s",s+1),insert(s); 46 failed(); 47 scanf("%s",s+1),work(s); 48 return 0; 49 } View Code

?

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

總結(jié)

以上是生活随笔為你收集整理的关键词匹配(Ac自动机模板题)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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