题目:
http://poj.org/problem?id=3461
大意:给你n组字符串,每组两个字符串,求第一个在第二个中出现的次数
模板题
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAXN=2000001;
int Next[MAXN],n,m,t;
char T[MAXN],S[MAXN];
void init_Next()
{
int j=0;
for(int i=2;i<=m;i++)
{
while(j && T[i]!=T[j+1]) j=Next[j];
if(T[i]==T[j+1]) j++;
Next[i]=j;
}
return;
}
int KMP()
{
int j=0,cnt=0;
for(int i=1;i<=n;i++)
{
while(j && S[i]!=T[j+1]) j=Next[j];
if(S[i]==T[j+1]) j++;
if(j==m) cnt++,j=Next[j];
}
return cnt;
}
void solve()
{
cin>>t;
while(t--)
{
memset(Next,0,sizeof(Next));
scanf("%s%s",T+1,S+1);
m=strlen(T+1),n=strlen(S+1);
init_Next();
cout<<KMP()<<endl;
}
return;
}
int main()
{
solve();
return 0;
}