Input
The first line of the input file contains a single number: the number of test cases to follow. Each test case has the following format:
One line with the word W, a string over {'A', 'B', 'C', …, 'Z'}, with 1 ≤ |W| ≤ 10,000 (here |W| denotes the length of the string W).
One line with the text T, a string over {'A', 'B', 'C', …, 'Z'}, with |W| ≤ |T| ≤ 1,000,000.Output
For every test case in the input file, the output should contain a single number, on a single line: the number of occurrences of the word W in the text T.
Sample Input
3 BAPC BAPC AZA AZAZAZA VERDI AVERDXIVYERDIANSample Output
1 3 0
#include "bits/stdc++.h"
using namespace std;
int p[1000005];
string str,str1;
int getNaxt(){
memset(p,0, sizeof(p));
int len=0,i=1;
while (i<str.size()){
if(str[len]==str[i]){
len++;
p[i]=len;
i++;
}else{
if(len>0){
len=p[len-1];
}else{
p[i]=len;
i++;
}
}
}
}
int kmp(){
int i=0,j=0,ans=0;
while (i<str.size()){
if(str1[j]==str[i]){
i++;
j++;
}else{
if(j>0){
j=p[j-1];
}else{
p[i]=j;
i++;
}
}
if(j==str1.size()){
ans++;
j=p[j-1];
}
}
return ans;
}
int main(){
ios::sync_with_stdio(0);
int n;
cin>>n;
while (n--){
cin>>str1>>str;
getNaxt();
int len=kmp();
cout<<len<<endl;
}
return 0;
}