记录编号 |
410866 |
评测结果 |
AAA |
题目名称 |
[POJ 3461] 乌力波 |
最终得分 |
100 |
用户昵称 |
xyz117 |
是否通过 |
通过 |
代码语言 |
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());
}
}