模板:
char s1[1000005];
char s2[1005];
int p[10005];
int cot = 0;
int l1,l2;
void init()
{
int i,j;
i=0;
l2 = strlen(s2);
j=-1;
p[0]=-1;
while(i<l2)
{
if(j==-1||s2[i]==s2[j])
{
p[++i]=++j;
}
else
j=p[j];
}
}
void kmp()
{
int i,j;
int l1,l2;
l1=strlen(s1);
l2=strlen(s2);
i=-1;
j=-1;
while(i<l1)
{
if(j==-1||s1[i]==s2[j])
{
i++;
j++;
}
else
{
j=p[j];
}
if(j==l2)
{
cot++;
j=0;
}
}
}