【模板】AC自动机(加强版) 洛谷3796 AC自动机
2018-01-12 21:59
369 查看
题目
有NN个由小写字母组成的模式串以及一个文本串TT。每个模式串可能会在文本串中出现多次。你需要找出哪些模式串在文本串TT中出现的次数最多。分析
改一改code
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<queue> #include<algorithm> using namespace std; struct Tree{ int fail,from; int vis[26]; int num; }ac[1000000]; int n; int cnt=0; int w[1000000]; string ss[500]; void Build(string s,int x) { int l=s.length(); int now=0; for(int i=0;i<l;++i) { if(ac[now].vis[s[i]-'a']==0) ac[now].vis[s[i]-'a']=++cnt; now=ac[now].vis[s[i]-'a']; } ac[now].num+=1; ac[now].from=x; } void Get_fail() { queue<int> Q; for(int i=0;i<26;++i) { if(ac[0].vis[i]!=0) { ac[ac[0].vis[i]].fail=0; Q.push(ac[0].vis[i]); } } while(!Q.empty()) { int u=Q.front(); Q.pop(); for(int i=0;i<26;++i) { if(ac[u].vis[i]!=0) { ac[ac[u].vis[i]].fail=ac[ac[u].fail].vis[i]; Q.push(ac[u].vis[i]); } else ac[u].vis[i]=ac[ac[u].fail].vis[i]; } } } void ac_Query(string s) { int l=s.length(); int now=0,ans=0; for(int i=0;i<l;++i) { now=ac[now].vis[s[i]-'a']; for(int t=now;t&&(ac[t].num!=-1);t=ac[t].fail) { if (ac[t].from!=0) w[ac[t].from]++; //ac[t].num=-1; } } for (int i=1;i<=n;i++) { if (w[i]>ans) ans=w[i]; } printf("%d\n",ans); for (int i=1;i<=n;i++) { if (w[i]==ans) cout<<ss[i]<<endl; } } int main() { scanf("%d",&n); while (n){ memset(ac,0,sizeof(ac)); memset(w,0,sizeof(w)); cnt=0; w[0]=0; for(int i=1;i<=n;++i) { string s; cin>>s; ss[i]=s; Build(s,i); } ac[0].fail=0; Get_fail(); string s; cin>>s; ac_Query(s); scanf("%d",&n); } }
相关文章推荐
- [洛谷3796]【模板】AC自动机(加强版)
- 【洛谷】3796 【模板】AC自动机(加强版)
- UVALive-4670 Dominating Patterns / 洛谷 3796 【模板】AC自动机
- 洛谷 P3796 【模板】AC自动机(加强版)
- luogu3796 【模板】AC自动机(加强版)
- 【洛谷P3796】【模板】AC自动机(加强版)
- AC自动机模板【洛谷3796】
- 洛谷 P3796 【模板】AC自动机(加强版)
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
- AC自动机模板3【洛谷3796】
- 洛谷P3796 【模板】AC自动机(加强版)
- 洛谷.3808/3796.[模板]AC自动机
- AC自动机模板
- hdu 2222: Keywords Search(AC自动机模板题)
- hdu:2222:Keywords Search(AC自动机模板题)
- (AC自动机)模板
- 关于 线段树 下传(AC) 不做标记 下传(T3)模板洛谷p3372
- AC自动机模板程序
- HDU 2896 病毒侵袭 (AC自动机数组型模板)
- AC自动机模板