功能 O(N)的时间预处理所有前缀hash值 O(1)的时间内查询任意字串hash值 原理 取固定值p,把字符串看作p进制数,并分配一个大于0的数代表每种字符 取固定值m,求p进制数对m的余数作为该字符串的hash值 p=131 m=unsigned long long (2^64) 预处理 ull p[N],h[N]; p[0]=1; for(int i=1;i<=n;i++) { p[i]=p[i-1]*131; h[i]=h[i-1]*131+str[i]; } 查询 ull get(int l,int r) { return h[r]-h[l-1]*p[r-(l-1)]; }