记录编号 410866 评测结果 AAA
题目名称 [POJ 3461] 乌力波 最终得分 100
用户昵称 Gravatarxyz117 是否通过 通过
代码语言 C++ 运行时间 0.307 s
提交时间 2017-06-02 20:43:57 内存使用 3.18 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define ull unsigned long long
const ull inf=1e8+7;
const int maxn=1000000;
char a[maxn+1],b[maxn+1],tmp[maxn+1];
int T;
int hash()
{
	int ans=0;
	int la=strlen(a),lb=strlen(b);
	if(la>lb)
	{
		strcpy(tmp,a);
		strcpy(a,b);
		strcpy(b,tmp);
	}
	ull t=1,ha=0,hb=0;
	for(int i=0;i<la;i++)
	{
		t*=inf;
		ha=ha*inf+a[i];
		hb=hb*inf+b[i];
	}
	for(int i=0;i+la<=lb;i++)
	{
		if(ha==hb)
			++ans;
		if(i+la<lb)
			hb=hb*inf+b[i+la]-b[i]*t;
	}
	return ans;
}
int main()
{
	freopen("oulipo.in","r",stdin);
	freopen("oulipo.out","w",stdout);
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s%s",a,b);
		printf("%d\n",hash());
	}
}