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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu5384(AC自动机+纪录重复单词出现的次数)

發布時間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu5384(AC自动机+纪录重复单词出现的次数) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

給出n篇文章,m個單詞,輸出每篇文章中單詞出現的次數,其中單詞會重復。


思路:

AC自動機模板題,添加一個單詞的結尾標記記錄即可。這里我們用了kuangbin的模板。


代碼:

#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <queue> #include<map> using namespace std;string str; string buf[100005];struct Trie {int next[10010*50][128],fail[100010*50],end[101000*50];int root,L;int newnode(){for(int i = 0;i < 128;i++)next[L][i] = -1;end[L++] = -1;return L-1;}void init(){L = 0;root = newnode();}void insert(string s ,int id){int len = s.length();int now = root;for(int i = 0;i < len;i++){if(next[now][s[i]] == -1)next[now][s[i]] = newnode();now = next[now][s[i]];}if(end[now]==-1)//就是這里,記錄單詞的次數end[now]=1;elseend[now]++;}void build(){queue<int>Q;fail[root] = root;for(int i = 0;i < 128;i++)if(next[root][i] == -1)next[root][i] = root;else{fail[next[root][i]] = root;Q.push(next[root][i]);}while(!Q.empty()){int now = Q.front();Q.pop();for(int i = 0;i < 128;i++)if(next[now][i] == -1)next[now][i]=next[fail[now]][i];else{fail[next[now][i]]=next[fail[now]][i];Q.push(next[now][i]);}}}int num[100005];void query(string buf,int n){for(int i = 0;i < n;i++)num[i] = 0;int len=buf.length();int now=root;for(int i=0;i<len;i++){now=next[now][buf[i]];int temp = now;while( temp != root ){if(end[temp] != -1)//統計單詞次數num[end[temp]]+=end[temp];temp = fail[temp];}}int ans=0;for(int i = 0;i < n;i++)if(num[i] > 0){ans+=num[i];}cout<<ans<<endl;}};Trie ac;int main() {int t;cin>>t;while(t--){int n,m;cin>>n>>m;ac.init();for(int i=1;i<=n;i++)cin>>buf[i];for(int i = 0;i < m;i++){cin>>str;ac.insert(str,i);}ac.build();for(int i=1;i<=n;i++)ac.query(buf[i],m);}return 0; }

總結

以上是生活随笔為你收集整理的hdu5384(AC自动机+纪录重复单词出现的次数)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。