预处理:

typedef unsigned long long ULL;//将unsinged long long 简写为ULL
base=137;
power[0]=1;//power[i]表示base的i次方
for (int i=1;i<=n;i++) //n为字符串的长度
    power=power[i-1]*b; //预处理出base的n次方

求一段字符串的哈希:

	ULL ans=0;
	for (int i=1;i<=strlen(s);i++) ans=ans*base+(ULL)(s[i]-'A'+1);
	ans即为字符串s的哈希值

求一段字符串的前缀哈希:

    for (int i=1;i<=strlen(s);i++) ha[i]=ha[i-1]*b+(ULL)(a[i]-'A'+1);
    ha[i]存储前i个字符的哈希总值
    当要求i~j的哈希值时,直接就是ha[j]-ha[i]*power[j]