记录编号 573163 评测结果 AAA
题目名称 [POJ 3461] 乌力波 最终得分 100
用户昵称 GravatarHzoi_Mafia 是否通过 通过
代码语言 C++ 运行时间 0.471 s
提交时间 2022-07-20 10:24:07 内存使用 16.24 MiB
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int T,n,m,pi[2000005];
char s[10005],t[1000005],pj[2000005];
int main(){
	freopen("oulipo.in","r",stdin);
	freopen("oulipo.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		scanf("%s%s",s+1,t+1);n=strlen(s+1),m=strlen(t+1);int ans(0);
		for(int i=0;i<n;++i)
			pj[i]=s[i+1];
		pj[n]='#';
		for(int i=1;i<=m;++i)
			pj[i+n]=t[i];
		pi[0]=0;
		for(int i=1,j;i<=m+n;++i){
			j=pi[i-1];
			while(j&&pj[i]!=pj[j])j=pi[j-1];
			if(pj[i]==pj[j])++j;
			pi[i]=j;
		}
		// for(int i=0;i<=n+m;++i)
			// cout<<i<<' '<<pj[i]<<' '<<pi[i]<<endl;
		for(int i=n+1;i<=n+m;++i)
			if(pi[i]==n)
				++ans;
		printf("%d\n",ans);
	}
}