码迷,mamicode.com
首页 > Windows程序 > 详细

AcWing 841. 字符串哈希

时间:2019-11-10 09:25:55      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:return   har   include   ret   div   col   nbsp   unsigned   long   

//快速判断两次字符串是不是相等 
#include<bits/stdc++.h>
using namespace std ;
typedef unsigned long long ULL;
const int N=100010,P=131;//经验值 13331  这两个出错情况最少 
int n,m;
char str[N];
ULL h[N],p[N];//h表示某一个前缀的哈希值,p是幂 
ULL get(int l,int r) {
    return h[r]-h[l-1]*p[r-l+1];//返回某一段的哈希值 
}
int main() {
    cin>>n>>m>>str+1;
    p[0]=1;//p的0次方为1 
    for(int i=1; i<=n; i++) {
        p[i]=p[i-1]*P;//求幂 
        h[i]=h[i-1]*P+str[i];//求前缀哈希值 
    }
    while(m--) {
        int l1,r1,l2,r2;
        cin>>l1>>r1>>l2>>r2;
        if(get(l1,r1)==get(l2,r2)) puts("Yes");// 如果哈希值相等 
        else puts("No");
    }
    return 0;
}

 

 

AcWing 841. 字符串哈希

标签:return   har   include   ret   div   col   nbsp   unsigned   long   

原文地址:https://www.cnblogs.com/QingyuYYYYY/p/11828729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!