POJ 3461 Oulipo(字符串hash)

 

题目链接

 

字符串hash判断字符串是否相等。

 

code

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4  
 5 using namespace std;
 6  
 7 typedef unsigned long long uLL;
 8 const uLL B = 131;
 9  
10 uLL f[10010];
11 uLL Hash[1000100];
12 char a[10010],b[1000100];
13  
14  
15 int main () {
16     int T;
17     scanf("%d",&T);
18     f[0] = 1;
19     for (int i=1; i<=10000; ++i) f[i] = (f[i-1] * B);
20     while (T--) {
21         int ans = 0;
22         scanf("%s%s",a,b);
23         int s1 = strlen(a),s2 = strlen(b);
24         uLL Ha = 0;
25         for (int i=0; i<s1; ++i) {
26             Ha = (Ha*B+a[i]);
27         }
28         Hash[0] = b[0];
29         for (int i=1; i<s2; ++i) {
30             Hash[i] = Hash[i-1]*B+b[i];
31         }
32         for (int i=0; i<=(s2-s1); ++i) {
33             int l = i,r = l+s1-1;
34             uLL Hb = Hash[r]-Hash[l-1]*f[s1];
35             if (Ha == Hb) ans++;
36         }
37         printf("%d\n",ans);
38     }
39     return 0;
40 }

 

转载于:https://www.cnblogs.com/mjtcn/p/8628240.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值