1 /* 2 * kmp 3 */ 4 #include <cstdio> 5 #include <iostream> 6 7 using namespace std; 8 9 const int N = 10005; 10 const int M = 1000005; 11 12 int next[N]; 13 char pat[N], str[M]; 14 15 void indexNext() { 16 int k = 0; 17 next[1] = 0; 18 for (int i=2; pat[i]; ++i) { 19 while (k && pat[k+1]!=pat[i]) k = next[k]; 20 if (pat[k+1] == pat[i]) ++k; 21 next[i] = k; 22 } 23 } 24 25 int kmp() { 26 int k = 0, cs = 0; 27 int lenPat = strlen(pat) - 1; 28 for (int i=1; str[i]; ++i) { 29 while (k && pat[k+1]!=str[i]) k = next[k]; 30 if (pat[k+1] == str[i]) ++k; 31 if (k == lenPat) ++cs, k = next[k]; 32 } 33 return cs; 34 } 35 36 int solve() { 37 indexNext(); 38 return kmp(); 39 } 40 41 int main() { 42 int t; 43 scanf ("%d", &t); 44 str[0] = pat[0] = '#'; 45 while (t--) { 46 scanf ("%s%s", pat+1, str+1); 47 printf ("%d\n", solve()); 48 } 49 return 0; 50 }