字符串哈希
把每个截取字符串以P进制形式转化成整数映射
#include <iostream>
using namespace std;
typedef unsigned long long ULL;
const int N=100010,P=13331;//经验值P取131或13331
ULL h[N],p[N];// h[k]存储字符串前k个字母的哈希值, p[k]存储 P^k mod 2^64
void inti() // 初始化
{
p[0]=1;
for (int i=1;i<=n;i++)
{
h[i]=h[i-1]*P+str[i];
p[i]=p[i-1]*P;
}
}
ULL get(int l,int r) // 计算子串 str[l ~ r] 的哈希值
{
return h[r]-h[l-1]*p[r-l+1];
}