#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int ne[20000];
char p[2000000],s[2000000];
int lenp,lens;
int cnt;
void getn()
{
int i=0,j=-1;
ne[0]=-1;
while(i<lenp)
{
if(j==-1||p[i]==p[j])
{
i++;
j++;
ne[i]=j;
}
else
{
j=ne[j];
}
}
}
void kmp()
{
getn();
int i=0,j=0;
while(i<lens)
{
if(j==-1||s[i]==p[j])
{
i++;
j++;
if(j==lenp)
{
cnt++;
}
}
else
{
j=ne[j];
}
}
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
while(n--)
{
memset(p,0,sizeof(p));
memset(s,0,sizeof(s));
memset(ne,0,sizeof(ne));
scanf("%s%s",p,s);
lenp=strlen(p);
lens=strlen(s);
cnt=0;
kmp();//KMP模板,别敲错代码就行了
printf("%d\n",cnt);
}
}
return 0;
}
hdu 1868 oulipo
最新推荐文章于 2020-02-07 11:05:28 发布