【字符串】——hash

直到今天,我才知道哈希是这样写的。


对于一个字符串c,我们可以将它hash掉,得到一个与众不同的值。

定义

typedef unsigned long long ull;
const int N=4e5+10;
char c[N];
ull h[N],g[N];
void hash(){
    g[0]=1;
    for(int i=1;c[i];i++){
        h[i]=h[i-1]*131+c[i];
        g[i]=g[i-1]*131;
    }
}

则它的子串为,其中p为一个质数。

ull tt=h[len]-h[len-i]*g[i];

利用ull的性质,大于上限的数会被自动取模,达到hash的目的。

猜你喜欢

转载自www.cnblogs.com/Nelson992770019/p/11354257.html