基础算法 841.字符串哈希
作者:互联网
也叫字符串前缀哈希法。
例如字符串“ABCDEFGH”。
用h[0], h[1], h[2]......h[n]分别表示前n个字符的子串的哈希值。
将字符串看作为p进制的数字,再将其mod一个数,得到哈希值。
经验上来说,p一般为131,或1331。
mod的数为2^64。unsigned long long如果溢出,就相当于对它取模。
#include<iostream> using namespace std; typedef unsigned long long ULL; const int N = 100010, p = 131; ULL h[N], n[N]; ULL get(int l, int r){ return h[r] - h[l - 1] * n[r - l + 1]; } int main(){ char str[N]; int len, m; scanf("%d%d%s",&len, &m, str + 1); n[0] = 1; for(int i = 1; i <= len; i ++ ){ n[i] = n[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; }
标签:哈希,841,int,d%,long,算法,ULL,字符串 来源: https://www.cnblogs.com/bz-2021/p/16244021.html