补全幂数组

用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 子串哈希要用到 B 的各次幂。补全 pw 的递推,输出 pw[5](B = 131)。 (本题用

开始练习 →

用子串哈希找位置

用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 aba

开始练习 →

双哈希数不同的子串

用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 aba

开始练习 →

用正反哈希判回文

用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 一个串正着算一遍哈希、倒着再算一遍,两个一样就是回文。补全 is_pal,依次判断 abccba、

开始练习 →

next 数组里存的是什么

第 1 步:给模式 ababc 填一张表 第 2 步:到第 1 位:重叠 0 个 第 3 步:到第 2 位:重叠 0 个 第 4 步:到第 3 位:重叠 1 个 第 5 步:到第 4 位:重叠 2 个 第 6 步:到第 5 位:重叠 0 个

开始练习 →

KMP 凭什么不用退文本指针

失配的时候,KMP 的文本指针一步都不退,靠的是【0】。

开始练习 →

失配时模式该跳到哪(C++)

比到模式的第 k 个字符失配了,KMP 会去查 next 表,把 k 换成表里【0】。

开始练习 →

ababc 的 next 表

一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 把模式的 next 表算出来: #include <iostream> #include <string> #

开始练习 →

自己算出 next 表

一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 补全 build_next,输出 next 表。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

写一个不回退的 KMP

一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 补全 kmp,输出全部位置。注意外层 i 一路往前,从不回头。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →