https://vjudge.net/contest/279156#problem/L
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int nn,n,m,i,j,ans,k,next[1000010];
char c1[1000010],c2[1000010];
int main()
{
scanf("%d",&nn);
while (nn--)
{
scanf("%s",c1+1);
scanf("%s",c2+1);
n=strlen(c1+1);
m=strlen(c2+1);
ans=0;
memset(next,0,sizeof(next));
for (i=2; i<=n; i++)
{
k=next[i-1];
if (c1[k+1]==c1[i]) k++;
else
{
while (k>0&&c1[k+1]!=c1[i]) k=next[k];
if (c1[k+1]==c1[i])k++;
}
next[i]=k;
}
k=0;
for (i=1; i<=m; i++)
{
if (c1[k+1]==c2[i]) k++;
else
{
while (k>0&&c1[k+1]!=c2[i]) k=next[k];
if (c1[k+1]==c2[i])k++;
}
if (k==n)
{
ans++;
k=next[k];
}
}
printf("%d\n",ans);
}
}