//#include<bits/stdc++.h>
#include<iostream>
#include<memory.h>
using namespace std;
const int maxn=10e3;
char a[1000050],b[10050];
int nextl[10050];
void crenext()
{
memset(nextl,0,sizeof(nextl));
nextl[0]=-1;
int j;
int m=strlen(b)-1;
for(int i=1;i<=m;i++)
{
j=nextl[i-1];
while(b[j+1]!=b[i]&&j>=0)
{
j=nextl[j];//cout<<j<<endl;
}
if(b[j+1]==b[i])
nextl[i]=j+1;
else
nextl[i]=-1;
}
for(int i=0;i<=m;i++)
nextl[i]++;
/*for(int i=0;i<m;i++)
cout<<nextl[i]<<" ";*/
}
int main()
{
memset(b,0,sizeof(b));memset(a,0,sizeof(a));
long n;
cin>>n;
while(n--)
{
cin>>b>>a;//>>a;
{
crenext();
int m=strlen(b),n=strlen(a);
int i=0,j=0,pos=-1;
int coun=0;
while(i<n)
{
// cout<<i<<" "<<j<<endl;
if(a[i]!=b[j])
{
if(j!=0)
{
j=nextl[j-1];
}
else
{
i++;
}
}
else
{
i++;j++;
}
// if(j==m){pos=i;break;}
if(j==m){coun++;}
}
cout<<coun<<endl;
// if(pos!=-1)
// cout<<pos-m+1<<endl;
// else cout<<-1;
}
}
return 0;}
题目:统计子串出现次数
//编译器用g++貌似会炸