UVA 1449 Dominating Patterns(AC自动机)
2016-10-25 18:17
363 查看
p数组少开了一个,查了一小时。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; const int maxnode=11000; struct AC{ int ch[maxnode][26]; int val[maxnode]; int last[maxnode]; int f[maxnode]; int cnt[155]; int sz; void init() {sz=1;memset(ch[0],0,sizeof(ch[0]));memset(cnt,0,sizeof(cnt));} int idx(char c) {return c-'a';} void insert(char *s,int v) { int u=0; for(int i=0;s[i];i++) { int c=idx(s[i]); if(!ch[u][c]) { memset(ch[sz],0,sizeof(ch[sz])); val[sz]=0; ch[u][c]=sz++; } u=ch[u][c]; } val[u]=v; } void print(int j) { if(j){ cnt[val[j]]++; print(last[j]); } } void find(char *T) { int j=0; for(int i=0;T[i];i++) { int c=idx(T[i]); j=ch[j][c]; if(val[j]) print(j); else if(last[j]) print(last[j]); } } void getfail() { queue<int> q; f[0]=0; for(int i=0;i<26;i++){ int u=ch[0][i]; if(u) {f[u]=0;q.push(u);last[u]=0;} } while(!q.empty()) { int r=q.front();q.pop(); for(int c=0;c<26;c++) { int u=ch[r][c]; if(!u) {ch[r][c]=ch[f[r]][c];continue;} q.push(u);int v=f[r]; while(v&&!ch[v][c]) v=f[v]; f[u]=ch[v][c]; last[u]=val[f[u]]?f[u]:last[f[u]]; } } } }; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define ss(x) scanf("%d",&x) AC ac; char text[1000001],p[151][80]; int main() { int n; while(true) { ss(n);if(n==0) break; ac.init(); rep(i,1,n) {scanf("%s",p[i]);ac.insert(p[i],i);} ac.getfail(); scanf("%s",text); ac.find(text); int best=-1; rep(i,1,n) {best=max(best,ac.cnt[i]);} printf("%d\n",best); rep(i,1,n) if(ac.cnt[i]==best) printf("%s\n",p[i]); } return 0; }
相关文章推荐
- UVA 1449 Dominating Patterns(AC自动机)
- uva 1449 - Dominating Patterns(AC自动机)
- UVa1449 - Dominating Patterns(AC自动机)
- UVA-1449 - Dominating Patterns(AC自动机)
- uva 1449 Dominating Patterns(AC自动机基本应用)
- UVA1449 Dominating Patterns(AC自动机)
- 【UVA】1449-Dominating Patterns(AC自动机)
- AC自动机+uva1449
- UVa 1449 - Dominating Patterns (AC自动机)
- uva-1449-AC自动机
- 出现次数最多的单词 AC自动机 UVA 1449 Dominating Patterns
- UVA 1449 - Dominating Patterns(AC自动机)
- UVA 1449 Dominating Patterns(AC自动机)
- UVA 1076 - Password Suspects(AC自动机+DP)
- UVA 11468 Substring(ac自动机+DP)
- UVA 11019 Matrix Matcher(AC自动机矩阵匹配)
- uva 11019 Matrix Matcher (ac自动机二维匹配)
- 【UVA】11468-Substring(AC自动机)
- UVa:1449 Dominating Patterns(AC自动机)
- uva 11468 AC自动机+概率DP