1.KMP

#include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> #include<iostream> using namespace std; int next[100]; char p[1000]; int makenext(char p[],int next[]) { int n=strlen(p); for(int i=1,k=0;i<=n;i++) { while(k>0&&p[i]!=p[k]) k=next[k-1]; if(p[i]==p[k]) k++; next[i]=k; } } int kmp(char p[],char t[],int next[]) { int n=strlen(p); int m=strlen(t); makenext(p,next); for(int i=0,k=0;i<m;i++) { while(k>0&&t[i]!=p[k]) k=next[k-1]; if(t[i]==p[k]) k++; if(k==n) return 1; } } int main() { return 0; }
2.AC自动机

//Twenty #include<iostream> #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #include<queue> using namespace std; int ans,t,n; char ch[1000001]; struct node{ node* fail,*s[26]; int w; node(){ fail=NULL;w=0; for(int i=0;i<26;i++) s[i]=NULL; } }*head,*tep,*root; void build(){ root=head; for(int i=0;ch[i]!='