哈希模板题,没卡单哈希。但是我单哈希和换进制的哈希都通过了,只有换模数的没过。
尝试过换一个模数,还是没过,现在急急急orz。希望有好心人帮忙看一下qwq
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=20090725,N2=1e6+5;
ull ha[N2],ha2[N2];
ull ppow[N2],ppow2[N2];
int p=131,n;
string s;
int len;
int main(){
cin>>s;
len=s.size();
ppow[0]=1;
ppow2[0]=1;
for(int i=0;i<len;i++){
ppow[i+1]=ppow[i]*p;
ppow2[i+1]=ppow2[i]*p%N;
if(i!=0) ha[i]=ha[i-1]*p+int(s[i]);
else ha[i]=int(s[i]);
if(i!=0) ha2[i]=(ha2[i-1]*p+int(s[i]))%N;
else ha2[i]=int(s[i]);
}
scanf("%d",&n);
int l1,r1,l2,r2;
ull res1,res2;
ull res11,res22;
for(int i=1;i<=n;i++){
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
//字 符 串 的 位 置 从 一 开 始 编 号
l1--;l2--;r1--;r2--;
res1=ha[r1]-ha[l1-1]*ppow[r1-l1+1];
res2=ha[r2]-ha[l2-1]*ppow[r2-l2+1];
res11=((ha2[r1]-ha2[l1-1]*ppow2[r1-l1+1])%N+N)%N;
res22=((ha2[r2]-ha2[l2-1]*ppow2[r2-l2+1])%N+N)%N;
if(res1==res2&&res11==res22) printf("Yes\n");//
else printf("No\n");
}
return 0;
}