题目分析
使用P=10000019,mod=1000000007;
注意:
数据要使用 long long型
每一步都要注意及时取模
相关代码实现
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int p=10000019;
const int mod=1000000007;
const int N=100010;
int n,m;
string str;
LL H[N];
LL powP[N];
void calH(string str){
H[0]=0;
powP[0]=1;
for(int i=1;i<=n;i++){
H[i]=((H[i-1]*p+str[i-1])%mod+mod)%mod;
powP[i]=(powP[i-1]*p)%mod; //注意及时取模
}
}
int main(){
cin>>n>>m;
cin>>str;
calH(str);
for(int i=0;i<m;i++){
int l1,l2,r1,r2;
cin>>l1>>r1>>l2>>r2;
int h1=((H[r1]-H[l1-1]*powP[r1-l1+1])%mod+mod)%mod; //及时取模
int h2=((H[r2]-H[l2-1]*powP[r2-l2+1])%mod+mod)%mod;
if(h1==h2) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}