地址
https://www.acwing.com/problem/content/843/
思想
R-L+1是字符串的长度
例题
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
//p一般取131防止出现冲突。
const int N=1e5+10,p=131;
typedef unsigned long long ULL;
int n,m;
//h[]用来存储前缀的hash值,p[]用来存储p的幂次方
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(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>str[i];
}
//初始化h[],P[]
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(get(l1,r1)==get(l2,r2)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}