点这里看题面

lyd书上的一道题…很水…直接暴力搞就好了。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int p=131;
const int maxn=1e6+10;
typedef unsigned long long ull;
int n,m;char s[maxn];
ull power[maxn],hash[maxn];
int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
void init(){power[0]=1;for(int i=1;i<maxn;i++)power[i]=power[i-1]*p;}
ull get(int l,int r){return hash[r]-hash[l-1]*power[r-l+1];}
int main(){
    scanf("%s",s+1);n=strlen(s+1);m=read();init();
    for(int i=1;i<=n;i++)hash[i]=hash[i-1]*p+s[i];
    while(m--){
        int l1=read(),r1=read(),l2=read(),r2=read();
        ull ret1=get(l1,r1),ret2=get(l2,r2);
        if(ret1==ret2)puts("Yes");else puts("No");
    }
    return 0;
}

发表评论