【求助】双哈希模板题求调,急
查看原帖
【求助】双哈希模板题求调,急
941560
HeiCat0725楼主2024/11/23 11:32

哈希模板题,没卡单哈希。但是我单哈希和换进制的哈希都通过了,只有换模数的没过。

尝试过换一个模数,还是没过,现在急急急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;
}
2024/11/23 11:32
加载中...