hdu 1686 KMP

来源:互联网 发布:武汉java培训 编辑:程序博客网 时间:2024/06/05 16:26
#include<cstdio>#include<cstring>char p[10010],t[1000100];int next[10010];void init(char *p,int *next){int m=strlen(p);next[0]=0;next[1]=0;for(int i=1;i<m;i++){int j=next[i];while(j&&p[i]!=p[j])j=next[j];next[i+1]=p[i]==p[j]?j+1:0;}}int kmp(char *p,char *t){int n=strlen(t),m=strlen(p);int j=0,res=0;for(int i=0;i<n;i++){while(j&&t[i]!=p[j]){  j=next[j];}if(t[i]==p[j])j++;if(j==m)res++;}return res;}int main(){int T;scanf("%d",&T);while(T--){scanf("%s",p);scanf("%s",t);init(p,next);printf("%d\n",kmp(p,t));}}