根据p进制的思想–>给每个串一个数值
https://www.acwing.com/problem/content/description/843/
#include <iostream>
using namespace std;
typedef long long LL;
//据经验字符串哈希P取131或13331 冲突率低
const int N=1e5+10,P=131;
int n,m;
char str[N];
LL h[N],p[N];//将每个字符映射到一个数组中
//具体使用P进制进行
//看成P进制
//i=1为最高位
int find(int l,int r){
return h[r]-h[l-1]*p[r-l+1];//h[l-1]要补位数
}
int main(){
cin>>n>>m>>str+1;
p[0]=1;
for(int i=1;i<=n;i++){
p[i]=p[i-1]*P;
h[i]=h[i-1]*P+str[i];
}
while(m--){
int l1,r1,l2,r2;
cin>>l1>>r1>>l2>>r2;
if(find(l1,r1)==find(l2,r2))cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}