哈希是字符串的一个东西,比较好用的..可以寻找任意位子的两段是不是相同,相同则哈希值相同..
建议哈希倍数为131,既是131进制数,建议直接unsigned long long作为模数.哈希用途很广的,可以用来排序,求最大回文子串长度...
哈希的存数方法是h[i]=h[i-1]*base+s[i]-'a'+1;//字符串哈希
得到这段哈希值先给大家话一下图罗
图片说明
下面给大家演示下哈希的实现方法.

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int base=131,N=1e6+5;
ull b[N],h[N];
char s[N];
int get(int l,int r)
{
    return h[r]-h[l-1]*b[r-l+1];
}
int main()
{
    scanf("%s",s+1);
    h[0]=0;b[0]=1;
    int n=strlen(s+1);
    for(int i=1;i<=n;i++)
    {
        b[i]=b[i-1]*base;
        h[i]=h[i-1]*base+s[i]-'a'+1;
    }
    int q,l,r,ll,rr;
    cin>>q;
    while(q--)
    {
       cin>>l>>r>>ll>>rr;
       if(get(l,r)==get(ll,rr)) puts("Yes");
       else                     puts("No");
    }
    return 0;
}

哈希介绍结束了~很简单一个算法,也很好用