Hash

 

 

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <string>
 5 using namespace std;
 6 const int Mod=1000000007;//10^9+7
 7 char s[10000];
 8 int Hash(int l,int r) {
 9     return Pre[r]-Pre[l-1]*Pow[r-l];
10 }
11 int Hash2(int l,int r) {
12     return (Pre2[r]-(long long)Pre2[l-1]*Pow[r-l]%Mod+Mod)%Mod;
13 }
14 int main() {
15     scanf("%s",s);
16     n=strlen(s);
17     Pow[0]=1;
18     for(int i=1;i<=n;i++)
19         Pow[i]=Pow[i-1]*26;
20     for(int i=1;i<=n;i++)
21 Pre[i]=Pre[i-1]*26+(s[i]-'a'),
22 Pre2[i]=(long long)Pre2[i-1]*26%Mod+(s[i]-'a');
23     printf("%d\n",Hash(l,r));
24 }

 

posted @ 2017-01-25 09:07  InWILL  阅读(132)  评论(0)    收藏  举报