题意:T组数据
第一行是单词,第二行文本,问单词在文本中出现多少次
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
AVERDXIVYERDIAN
Sample Output
1
3
0
#include<stdio.h>
#include<string.h>
char w[10010];
int pre[10010];
char str[1000010];
int lw;
void predeal(){
pre[1]=0;
int j=0;
for(int i=2;i<=lw;i++)
{
while(j>0&&w[j+1]!=w[i]) j=pre[j];
if(w[j+1]==w[i]) j++;
pre[i]=j;
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%s%s",w+1,str);
lw=strlen(w+1);
predeal();
int len=strlen(str);
int st=0,j=0;
int ans=0;
while(st<len){
if(w[j+1]==str[st]){
j++;st++;
if(j==lw) ans++,j=pre[j];
}
else if(j>0) j=pre[j];
else st++;
}
printf("%d\n",ans);
}
}