题目大意:求A串在B串出现的次数。
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#include<iostream>
using namespace std;
const int maxn=10050;
int fa[maxn];
void get_init(string str)
{
memset(fa,0,sizeof(fa));
for(int i=1;i<str.length();i++)
{
int j=fa[i];
while(j&&str[i]!=str[j])
{
j=fa[j];
}
fa[i+1]=(str[i]==str[j])?j+1:0;
}
}
int kmp(string a,string str)
{
int ans=0;
get_init(str);
int j=0;
for(int i=0;i<a.length();i++)
{
while(j&&a[i]!=str[j])
{
j=fa[j];
}
if(a[i]==str[j])
{
j++;
}
if(j==str.length())
{
ans++;
}
}
return ans;
}
int main()
{
string a,str;
int T;
scanf("%d",&T);
while(T--)
{
cin>>str>>a;
int ans=kmp(a,str);
printf("%d\n",ans);
}
return 0;
}