ac自动机
1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int maxnode=150*70+5; 7 char s[155][75]; 8 char in[1000000+5]; 9 struct Trie 10 { 11 int ch[maxnode][26]; 12 int val[maxnode]; 13 int f[maxnode]; 14 int cnt[155]; 15 int sz; 16 void initial() 17 { 18 sz=1; 19 memset(ch[0],0,sizeof(ch[0])); 20 memset(val,0,sizeof(val)); 21 memset(cnt,0,sizeof(cnt)); 22 } 23 void insert(char *s,int v) 24 { 25 int len=strlen(s); 26 int u=0; 27 for(int i=0;i
q; 42 f[0]=0; 43 for(int i=0;i<26;i++) 44 { 45 int u=ch[0][i]; 46 if(u) 47 { 48 q.push(u);f[u]=0; 49 } 50 } 51 while(!q.empty()) 52 { 53 int r=q.front(); 54 q.pop(); 55 for(int c=0;c<26;c++) 56 { 57 int u=ch[r][c]; 58 if(!u) continue; 59 q.push(u); 60 int v=f[r]; 61 while(v&&!ch[v][c]) v=f[v]; 62 f[u]=ch[v][c]; 63 } 64 } 65 } 66 void solve(char *s,char in[][75],int n) 67 { 68 get_fail(); 69 int len=strlen(s); 70 int u=0; 71 for(int i=0;i
ans; 87 for(int i=1;i<=n;i++) 88 if(cnt[i]==MAX) {ans.push_back(i);} 89 printf("%d\n",MAX); 90 for(int i=0;i