luogu3796【模板】AC自动机(加强版)
2018-03-22 17:34
441 查看
嗯,模板题。pre数组主要是为了更快的统计答案。
fail[i]表示从根到节点i的字符串的后缀与从根到fail[i]的字符串相等,且最长的。
fail[i]表示从根到节点i的字符串的后缀与从根到fail[i]的字符串相等,且最长的。
#include <cstdio> #include <cstring> #include <algorithm> #include <queue> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 11000 inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f; } int n,cnt[160],son [26],v ,owo,rt=1,fail ,pre ; char s[1000010],a[160][100]; inline void ins(char *s,int id){ int len=strlen(s+1),p=rt; for(int i=1;i<=len;++i){ int to=s[i]-'a'; if(!son[p][to]) son[p][to]=++owo;p=son[p][to]; }v[p]=id; } inline void buildAC(){ queue<int>q;q.push(rt); while(!q.empty()){ int x=q.front();q.pop(); for(int i=0;i<26;++i){ int &y=son[x][i],k=fail[x]; if(!y){y=son[k][i];continue;}q.push(y); fail[y]=son[k][i];pre[y]=v[fail[y]]?fail[y]:pre[fail[y]]; } } } inline void gao(char *s){ int m=strlen(s+1),p=rt; for(int i=1;i<=m;++i){ p=son[p][s[i]-'a']; for(int t=p;t;t=pre[t]) cnt[v[t]]++; } } int main(){ // freopen("a.in","r",stdin); while(1){ n=read();if(!n) break; memset(son,0,sizeof(son));memset(v,0,sizeof(v)); memset(fail,0,sizeof(fail));memset(pre,0,sizeof(pre)); memset(cnt,0,sizeof(cnt));owo=1; for(int i=1;i<=n;++i) scanf("%s",a[i]+1),ins(a[i],i); for(int i=0;i<26;++i) son[0][i]=rt; buildAC();scanf("%s",s+1);gao(s);int ans=0; for(int i=1;i<=n;++i) ans=max(ans,cnt[i]);printf("%d\n",ans); for(int i=1;i<=n;++i) if(cnt[i]==ans) puts(a[i]+1); }return 0; }
相关文章推荐
- 洛谷 P3796 【模板】AC自动机(加强版)
- 洛谷P3796 【模板】AC自动机(加强版)
- luogu3796 【模板】AC自动机(加强版)
- P3796 【模板】AC自动机(加强版)
- 洛谷P3796 - 【模板】AC自动机(加强版)
- 洛谷 P3796 【模板】AC自动机(加强版)
- 【洛谷P3796】【模板】AC自动机(加强版)
- 【模板】AC自动机(加强版) 洛谷3796 AC自动机
- P3796 【模板】AC自动机(加强版)
- [洛谷3796]【模板】AC自动机(加强版)
- cjoj P1435 - 【模板题 USACO】AC自动机 && 洛谷 P3796 【模板】AC自动机(加强版)
- luogu P3796【模板】AC自动机(加强版)
- P3796 【模板】AC自动机(加强版)
- 【洛谷】3796 【模板】AC自动机(加强版)
- hdu 2222 AC自动机模板题(指针版+数组版)
- P3808 【模板】AC自动机(简单版)
- P3808 【模板】AC自动机(简单版)
- HDU2222 AC自动机 入门模板
- 【模板】AC自动机
- AC自动机学习小记 Hdu 2222 Keywords Search (模板)