Acwing 841. 字符串哈希

Acwing 841. 字符串哈希

  • 题目描述
  • 思路讲解
  • 代码展示

题目描述

Acwing 841. 字符串哈希_第1张图片

思路讲解

Acwing 841. 字符串哈希_第2张图片

Acwing 841. 字符串哈希_第3张图片

代码展示

#include 
#include 

using namespace std;

typedef unsigned long long ULL;

const int N = 100010, P = 131; // P = 131 或者13331(经验值)

int n, m;
char str[N];
ULL h[N], p[N];

ULL get(int l, int r) {
    return h[r] - h[l - 1] * p[r - l + 1];
}

int main() {
    scanf("%d%d", &n, &m);
    scanf("%s", str + 1);

    p[0] = 1;
    for (int i = 1; i <= n; i++) {
        h[i] = h[i - 1] * P + str[i];
        p[i] = p[i - 1] * P;
    }

    while (m--) {
        int l1, r1, l2, r2;
        scanf("%d%d%d%d", &l1, &r1, &l2, &r2);

        if (get(l1, r1) == get(l2, r2)) puts("Yes");
        else puts("No");
    }

    return 0;
}

你可能感兴趣的:(C++刷题,acwing,哈希算法,算法,散列表,c++,数据结构)