1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<algorithm> 5 #include<cstring> 6 #include<vector> 7 using namespace std; 8 int N, fail[2000000], ANS[2000000]; 9 char pat[2000000], text[2000000]; 10 inline void KMP() { 11 int n = strlen(pat); 12 for (int i = 0; i <= n + 1; i++) fail[i] = 0; 13 for (int i = 1; i <= n - 1; i++) { 14 int j = i; 15 while (j>0) { 16 j = fail[j]; 17 if (pat[j] == pat[i]) { 18 fail[i + 1] = j + 1; 19 break; 20 } 21 } 22 } 23 ANS[0] = 0; 24 int m = strlen(text); 25 for (int i = 0, j = 0; i <= m - 1; i++) { 26 if (j <= n - 1 && text[i] == pat[j]) j++; 27 else { 28 while (j > 0) { 29 j = fail[j]; 30 if (text[i] == pat[j]) { 31 j++; break; 32 } 33 } 34 } 35 if (j == n) ANS[++ANS[0]] = i - n + 1; 36 } 37 } 38 int main() { 39 scanf("%d", &N); 40 while (N--) { 41 cin >> pat >> text; 42 KMP(); 43 printf("%d ", ANS[0]); 44 } 45 return 0; 46 }