Hash记录字符串
Posted accepting
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hash记录字符串相关的知识,希望对你有一定的参考价值。
Hash记录字符串模板:
mod常常取1e9+7,base常常取299,,127等等等....有的题目会卡Hash,因为可能会有两个不同的Hash但却有相通的Hash值...这个时候可以用双Hash来判断。Hash值还是很巧妙的...
ll getHash(ll x,ll y){
return (Hash[y]%mod-Hash[x-1]*p[y-x+1]%mod+mod)%mod;
}
for(ll i=1;i<=n;i++){
Hash[i]=((Hash[i-1]*base)%mod+s[i])%mod;
p[i]=p[i-1]*base%mod;
}
其实可以用unsiged long long 来自动取模,这样会让程序更快一点...
code:
ull getHash(ull x,ull y){
return Hash[y]-Hash[x-1]*p[y-x+1];
}
for(int i=1;i<=n;i++){
Hash[i]=Hash[i-1]*base+s[i];
p[i]=p[i-1]*base;
}
以上是关于Hash记录字符串的主要内容,如果未能解决你的问题,请参考以下文章