功能
O(N)的时间预处理所有前缀hash值
O(1)的时间内查询任意字串hash值
原理
取固定值p,把字符串看作p进制数,并分配一个大于0的数代表每种字符
取固定值m,求p进制数对m的余数作为该字符串的hash值
p=131 m=unsigned long long (2^64)
预处理
ull p[N],h[N];
p[0]=1;
for(int i=1;i<=n;i++)
{
p[i]=p[i-1]*131;
h[i]=h[i-1]*131+str[i];
}
查询
ull get(int l,int r)
{
return h[r]-h[l-1]*p[r-(l-1)];
}


京公网安备 11010502036488号