hdu2896 病毒侵袭 AC自动机入门题
2014-10-29 23:03
330 查看
和hdu2222类似,ac自动机入门。
#include<cstdio> #include<cstring> #include<algorithm> #include<vector> #include<iostream> #include<queue> using namespace std; int ch[100005][128],tot; char c[505][205]; int cover[505]; vector<int> val[100005]; char d[10005]; int fail[100005]; queue<int> q; int a[505],cnt; void get_trie(int n){ int i,j,p,f; tot=0; for(i=0;i<n;i++){ p=strlen(c[i]); f=0; for(j=0;j<p;j++){ if(ch[f][c[i][j]])f=ch[f][c[i][j]]; else{ ch[f][c[i][j]]=++tot; f=tot; } } val[f].push_back(i); } } void get_fail(void){ int i,fa,p; for(i=0;i<128;i++){ if(ch[0][i])q.push(ch[0][i]); } while(!q.empty()){ p=q.front(); q.pop(); for(i=0;i<128;i++){ if(ch[p][i]){ q.push(ch[p][i]); fa=fail[p]; while(fa&&!ch[fa][i]) fa=fail[fa]; fa=ch[fa][i]; fail[ch[p][i]]=fa; } } } } int find(char *T){ int i,j,n,m,p,k; n=strlen(T); j=0; cnt=0; memset(cover,0,sizeof(cover)); for(i=0;i<n;i++){ while(j&&!ch[j][T[i]]) j=fail[j]; j=ch[j][T[i]]; p=j; while(p){ k=val[p].size(); int f=0; for(m=0;m<k;m++){ if(cover[val[p][m]]==-1){ f=1; break; } a[cnt++]=val[p][m]; cover[val[p][m]]=-1; } if(f) break; p=fail[p]; } } if(cnt>0){ sort(a,a+cnt); return 0; } return 1; } int main() { int i,j,n,m,p; scanf("%d",&n); getchar(); for(i=0;i<n;i++){ gets(c[i]); } get_trie(n); get_fail(); scanf("%d",&m); p=0; for(i=0;i<m;i++){ scanf("%s",d); if(!find(d)){ printf("web %d:",i+1); for(j=0;j<cnt;j++) printf(" %d",a[j]+1); printf("\n"); } else p++; } printf("total: %d\n",m-p); }
相关文章推荐
- hdu2896 病毒侵袭 AC自动机入门题 N(N <= 500)个长度不大于200的模式串(保证所有的模式串都不相同), M(M <= 1000)个长度不大于10000的待匹配串,问待匹配串中有哪几个模式串,
- hdu 2896 病毒侵袭 AC自动机入门题
- HDU2896 病毒侵袭【AC自动机】
- HDU2896[病毒侵袭] AC自动机
- hdu3065 病毒侵袭持续中 AC自动机入门题 N(N <= 1000)个长度不大于50的模式串(保证所有的模式串都不相同), 一个长度不大于2000000的待匹配串,求模式串在待匹配串中的出现次数。
- hdu3065 病毒侵袭持续中 AC自动机入门
- 【HDU2896】病毒侵袭-AC自动机模板题
- [hdu2896] 病毒侵袭 AC自动机
- 【AC自动机】[HDU2896]病毒侵袭
- hdu2896(病毒侵袭)--AC自动机
- HDU2896-病毒侵袭-ac自动机
- HDOJ 2896 病毒侵袭(AC自动机入门)
- 【HDU2896】病毒侵袭 AC自动机
- HDU2896 病毒侵袭[AC自动机]
- HDU2896(病毒侵袭--AC自动机)
- hdu2896 病毒侵袭 ac自动机
- AC自动机(2)--hdu2896(病毒侵袭)(基础题)
- [hdu2896][ac自动机]病毒侵袭
- hdu2896--病毒侵袭(AC自动机入门2)
- 病毒侵袭 hdu2896 ac自动机