hash模板
作者:
kaoru
,
2020-12-25 11:31:31
,
所有人可见
,
阅读 469
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1000010,base=131;//进制
ull h[N],p[N];
char str[N];
ull get(int l,int r){
return h[r]-h[l-1]*p[r-l+1];
}
int main(){
scanf("%s",str+1);
int n=strlen(str+1);
p[0]=1;
for(int i=1;i<=n;i++){
p[i]=p[i-1]*base;
}
for(int i=1;i<=n;i++){
h[i]=h[i-1]*base+str[i]-'a'+1; //映射到1-26
}
int m;
cin>>m;
while(m--){
int l,r;
cin>>l>>r;
cout<<get(l,r)<<endl;
}
for(int i=1;i<=n;i++)printf("%llu\n",h[i]);
return 0;
}//注意代码要放在两组三个点之间,才可以正确显示代码高亮哦~