再刷模板ing。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char T[1000004],W[10004];
int n,m,f[10004];
inline void getfail(char *W,int m) {
f[0]=f[1]=0;
for (register int i=1;i<m;++i) {
int j=f[i];
while (j&&W[i]^W[j]) j=f[j];
f[i+1]=W[i]==W[j]?j+1:0;
}
}
inline void kmp(char *T,char *W,int n,int m) {
int sum=0;
getfail(W,m);
int j=0;
for (register int i=0;i<n;++i) {
while (j&&T[i]^W[j]) j=f[j];
if (T[i]==W[j]) ++j;
if (j==m) ++sum;
}
printf("%d\n",sum);
}
int main() {
int kase;
scanf("%d",&kase);
while (kase--) {
scanf("%s%s",W,T);
n=strlen(T),m=strlen(W);
kmp(T,W,n,m);
}
return 0;
}