记录编号 126194 评测结果 A
题目名称 [POJ 3461] 乌力波 最终得分 100
用户昵称 Gravatar水中音 是否通过 通过
代码语言 C++ 运行时间 0.299 s
提交时间 2014-10-11 18:50:33 内存使用 4.13 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
string s1,s2;
int n,m,h,i,l,p,k=0,next[1000010]={0};
void get_next()
{
	memset(next,0,sizeof(next));
	m=s1.size();p=0;
	for(l=1;l<m;l++)
	{
		while(p&&s1[p]!=s1[l])p=next[p];
		if(s1[p]==s1[l])next[l+1]=++p;
		else next[l+1]=0;
	}
	h=s2.size();p=0;
	for(l=0;l<h;l++)
	{
		while(p&&s1[p]!=s2[l])p=next[p];
		if(s1[p]==s2[l]){p++;if(p==m)k++;}
	}
}
int main()
{
	freopen("oulipo.in","r",stdin);
	freopen("oulipo.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		k=0;
		cin>>s1;
		cin>>s2;
		get_next();
		printf("%d\n",k);
	}
	return 0;
}