欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

字符串前缀哈希法

时间:2023-06-01

前面为acwing上课截图!

总结:字符串前缀哈希,每一个字符看成进制位,然后转换成十进制取模。

l~r的哈希值:h[r]-h[l-1]*p[r-l+1];

841、字符串哈希 - AcWing题库

#includeusing namespace std;typedef unsigned long long ULL;const int P=131,N=1e5+10;//取模Pchar str[N];ULL h[N],p[N];//h[]哈希表 p[]进制位int n,m;ULL get(int l,int r)//得到l~r的哈希值{return h[r]-h[l-1]*p[r-l+1];}int main(){scanf("%d%d",&n,&m);scanf("%s",str+1);p[0]=1;//进制 p^0=1for(int i=1;i<=n;i++){p[i]=p[i-1]*P;//进制每次加一h[i]=h[i-1]*P+str[i];//哈希值由前一个×进制+本字符值}while(m--){int l1,r1,l2,r2;scanf("%d%d%d%d",&l1,&r1,&l2,&r2);if(get(l1,r1)==get(l2,r2)) puts("Yes");else puts("No");}return 0;}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。