记录编号 293642 评测结果 A
题目名称 [POJ 3461] 乌力波 最终得分 100
用户昵称 Gravatardateri 是否通过 通过
代码语言 C++ 运行时间 0.119 s
提交时间 2016-08-11 00:09:30 内存使用 1.17 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	freopen("oulipo.in","r",stdin);
	freopen("oulipo.out","w",stdout);
	int m,n,i,t,count,ans=0,p,j;
	char a[10005],b[1000005];
	int next[10005];
	scanf("%d",&t);
	while(t--)
	{
		ans=0;
		scanf("%s%s",a+1,b+1);
		n=strlen(a+1);
		m=strlen(b+1);
		next[1]=0;
		for(i=2;i<=n+1;i++)
		{
		  p=next[i-1];
		  while(a[i-1]!=a[p]&&p>0) p=next[p];
		  next[i]=p+1;
		}
		//for(i=1;i<=n+1;i++)
		  //printf("%d ",next[i]);
		for(i=1,j=1;i<=m;)
		{
			if(j==0||a[j]==b[i]) 
			{
			  j++;
			  i++;
			  if(j>n)
			  ans++,j=next[j];
			}
			else
			  while(a[j]!=b[i]&&j>0)
			    j=next[j];
		}
	    printf("%d\n",ans);
	}
	return 0;
}