跳转至

字符串哈希

#include<bits/stdc++.h>
#define Maxn 10000
using namespace std;
typedef unsigned long long ull;
int n;
const int P=131;
ull p[Maxn+5],h[Maxn+5];
char s[Maxn+5];
void init()
{
    p[0]=1;
    h[0]=0;
    for(int i=1;i<=n;i++)
    {
        p[i]=p[i-1]*P;
        h[i]=h[i-1]*P+s[i];
    }
}
ull get(int l,int r)
{
    return h[r]-h[l-1]*p[r-l+1];
}
int main()
{
    scanf("%s",s+1);
    n=strlen(s+1);
    init();
    int l1,r1,l2,r2;
    while(scanf("%d%d%d%d",&l1,&r1,&l2,&r2)==4) printf(get(l1,r1)==get(l2,r2)?"Same\n":"Different\n");
}