切记:int n = strlen(s+1); 要单独拿出来,不然一定会出现TLE。
C++ 代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1000010,pk=131;
typedef unsigned long long ULL;
ULL h[N],p[N];
char s[N];
ULL get(int l,int r)
{
return h[r]-h[l-1]*p[r-l+1];
}
int main()
{
scanf("%s",s+1);
p[0]=1;
int n = strlen(s+1);
for(int i=1;i<n;i++)
{
h[i]=h[i-1]*pk+(s[i]-'a')+1;
p[i]=p[i-1]*pk;
}
int m,l1,l2,r1,r2;
scanf("%d",&m);
while(m--)
{
scanf("%d%d%d%d",&l1,&r1,&l2,&r2);
ULL u1=get(l1,r1);
ULL u2=get(l2,r2);
if(u1==u2) printf("Yes\n");
else printf("No\n");
}
return 0;
}
感谢大佬提醒,琢磨了很久