#include<cstdio> #include<iostream> #include<cstring> #include<string> using namespace std; int faild[10005]; string w; string t; int n,m; int temp; int kmp() { //memset(faild,-1,sizeof(faild)); faild[0]=-1; int i,j=-1; for(i=1;i<n;i++) { while(j!=-1&&w[i]!=w[j+1]) { j=faild[j]; } if(w[i]==w[j+1]) j++; faild[i]=j; } i=0; j=-1; for(i=0;i<m;i++) { while(j!=-1&&t[i]!=w[j+1]) { j=faild[j]; } if(t[i]==w[j+1]) j++; if(j==n-1) { temp++; j=faild[j]; } } return temp; } int main() { int T; scanf("%d",&T); while(T--) { cin>>w>>t; temp=0; n=w.length(); m=t.length(); printf("%d/n",kmp()); } return 0; } 1 void KMP_next(char b[], int pre[]) { 2 int n = (int)strlen(b), k; 3 pre[0] = -1; k = -1; 4 for(int i = 1; i < n; i++) { //没有i == n 5 while(k > -1 && b[k+1] != b[i]) k = pre[k]; 6 if(b[k+1] == b[i]) k++; 7 pre[i] = k; 8 } 9 } 1 void KMP_next(char s[], int pre[]) { 2 int i = 0, j = -1, n = (int)strlen(s); 3 pre[0] = -1; 4 while(i <= n) { //注意有i == n 5 if(j == -1 || s[j] == s[i]) { 6 i++; j++; 7 pre[i] = j; 8 } 9 else j = pre[j]; 10 } 11 }