电脑准备重装一波,把模板都发一下
struct KMP
{
int a[1000100];
int b[11111];
int n,m;
int nextval[11111];
void init()
{
memset(nextval,0,sizeof(nextval));
}
void get_next() //next跳表
{
for(int i=1;i<m;i++)
{
int j=nextval[i];
while(j&&b[j]!=b[i])
j=nextval[j];
nextval[i+1]=b[i]==b[j]?j+1:0;
}
}
int find_aim() //匹配长度
{
int j=0;
for(int i=0;i<n;i++)
{
while(j&&b[j]!=a[i]) j=nextval[j];
if(b[j]==a[i]) j++;
if(j==m) return i-m+2;
}
return -1;
}
}T;