字符串哈希
1 核心思想:将字符串看成P进制数,P的经验值是131或13331,取这两个值的冲突概率低 2 小技巧:取模的数用2^64,这样直接用unsigned long long存储,溢出的结果就是取模的结果 3 4 typedef unsigned long long ULL; 5 ULL h[N], p[N]; // h[k]存储字符串前k个字母的哈希值, p[k]存储 P^k mod 2^64 6 7 // 初始化 8 p[0] = 1; 9 for (int i = 1; i <= n; i ++ ) 10 { 11 h[i] = h[i - 1] * P + str[i]; 12 p[i] = p[i - 1] * P; 13 } 14 15 // 计算子串 str[l ~ r] 的哈希值 16 ULL get(int l, int r) 17 { 18 return h[r] - h[l - 1] * p[r - l + 1]; 19 }
Mamba never out

浙公网安备 33010602011771号