您的位置:首页 > 其它

KMP模板

2016-02-03 08:41 267 查看
比赛时发现憋不出模板啦

这真是伤心 只写2次的东西真心记不住

贴个以前的模板 多敲几遍

POJ 3461

1 #include<cstdio>

2 #include<iostream>
3 #include<cstring>
4 using namespace std;
5 int T,la,lb;
6 char a[1000000+1],b[10000+1];
7 int to[10000+1];
8 int main()
9 {
scanf("%d",&T);
while(T--)
{
scanf("%s %s",b+1,a+1);
la=strlen(a+1),lb=strlen(b+1);

//to
int j=0; to[1]=0;
for(int i=2;i<=lb;i++)
{
while(j>0&&b[j+1]!=b[i]) j=to[j];
if(b[j+1]==b[i]) j++;
to[i]=j;
}

// 匹配
int ans=0; j=0;
for(int i=1;i<=la;i++)
{
while(j>0&&a[i]!=b[j+1]) j=to[j];
if(a[i]==b[j+1]) j++;
if(j==lb) ans++,j=to[j];
}

printf("%d\n",ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: