diff --git "a/docs/String/\345\255\227\347\254\246\344\270\262\347\232\204hash.md" "b/docs/String/\345\255\227\347\254\246\344\270\262\347\232\204hash.md" index 7e1d08ee..b45f6f1b 100644 --- "a/docs/String/\345\255\227\347\254\246\344\270\262\347\232\204hash.md" +++ "b/docs/String/\345\255\227\347\254\246\344\270\262\347\232\204hash.md" @@ -23,46 +23,56 @@ base可以取131或13331,冲突小 ```cpp typedef unsigned long long ull; -const int N=1e6+1; -const ull base=131; -const ull mod=1e9+9; -ull has[N],power[N]; +const int N=1e6+1,modnum=2; +const ull base=131,mod[modnum]={(ull)1e8+7,(ull)1e9+9}; +ull pw[modnum][N]; void init() { - power[0]=1; - for(int i=1;i> &h) { - s=" "+s; - int len=s.length(); - has[0]=0; - for(int i=1;i<=len;++i) - has[i]=(has[i-1]*base+s[i]-'a'+1)%mod; + h.resize(modnum); + for(int j=0;j subHash(vector> &h,int l,int r) { - return (has[r]-has[l-1]*power[r-l+1]%mod)%mod; + array res; + for(int i=0;i> &rev) { - ... - has[0]=0; - rev[0]=0; - for(int i=1;i<=len;++i) + rev.resize(modnum); + for(int j=0;j subHash(vector> &rev,int l,int r) { - return (rev[n-l+1]-has[n-r]*power[r-l+1]%mod)%mod; + array res; + for(int i=0;i