一维哈希
char s[N] int f[N], fac[N]; int gethash(int l, int r) { return ((f[r]-(ll)f[l-1]*fac[r-l+1])%P+P)%P; } int main() { scanf("%s", s); REP(i,1,n) fac[i]=233ll*fac[i-1]%P; REP(i,1,n) f[i]=(f[i-1]*233ll+s[i]-'A'+1)%P; }
二维哈希
一维哈希
char s[N] int f[N], fac[N]; int gethash(int l, int r) { return ((f[r]-(ll)f[l-1]*fac[r-l+1])%P+P)%P; } int main() { scanf("%s", s); REP(i,1,n) fac[i]=233ll*fac[i-1]%P; REP(i,1,n) f[i]=(f[i-1]*233ll+s[i]-'A'+1)%P; }
二维哈希