【模板】哈希hash

板子1

struct HASH {
    typedef unsigned long long ull;
    static const int _N = 1e5 + 10;
    const ull base = 131;
    ull p[_N], f[_N];
    int lenS;

    // 传进来的字符串 下标从1开始
    // 同时 传进来字符串的长度
    void init(const string &s,const int _lenS) {
        lenS = _lenS;
        p[0] = 1;// base^0
        for (int i = 1; i <= lenS; i++) {
            f[i] = f[i - 1] * base + (s[i] - 'a' + 1);
            p[i] = p[i - 1] * base;// base^i
        }
    }

    ull getHash(int l, int r) {
        return f[r] - f[l - 1] * p[r - l + 1];
    }

    ull operator()(int l, int r) {
        return getHash(l, r);
    }
} Hash;

/*
	用法:
		Hash.init(s, n = s.length()-1)
		ull val = Hash(l,r)
	
*/
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页