码迷,mamicode.com
首页 > 其他好文 > 详细

Hash记录字符串

时间:2020-04-12 18:38:25      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:color   记录   col   return   get   span   ret   ++   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记录字符串

标签:color   记录   col   return   get   span   ret   ++   hash   

原文地址:https://www.cnblogs.com/Accepting/p/12686647.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!