当前位置: 代码迷 >> 综合 >> POJ 3461 Oulipo(KMP模板题)
  详细解决方案

POJ 3461 Oulipo(KMP模板题)

热度:78   发布时间:2023-11-23 07:06:43.0

 求T串中包含了几个P串//裸的kmp题,试一下自己的模板

#include<iostream>
#include<cstring>
#include<string.h>
#include<cstdio>
#include<cstdlib>
using namespace std;
void kmp_pre(char x[],int m,int next[])
{int i,j;j=next[0]=-1;i=0;while(i<m){while(-1!=j&&x[i]!=x[j]) j=next[j];next[++i]=++j;}
}
//返回x在y中出现的次数,可以重叠
int next[1000010];
int KMP_Count(char x[],int m,char y[],int n)
{int i,j;int ans=0;kmp_pre(x,m,next);i=j=0;while(i<n){while(j!=-1&&y[i]!=x[j]) j=next[j];i++;j++;if(j>=m){ans++;j=next[j];}}return ans;
}
int main()
{int k;scanf("%d",&k);while(k--){char xx[1000000+100],yy[1000000+100];scanf("%s%s",yy,xx);int cm=strlen(yy);int cn=strlen(xx);int cnt=0;cnt=KMP_Count(yy,cm,xx,cn);printf("%d\n",cnt);}return 0;
}