1 条题解
-
0
题解:花神的嘲讽计划
核心思路
本题要判断在序列的某个区间 中,是否存在长度为 的连续子段与给定的嘲讽方案完全匹配。
主要方法
-
滚动哈希(Rabin-Karp)
将序列中每个长度为 的子段通过哈希函数映射为一个无符号长整数(),便于快速比较。 -
可持久化线段树
建立可持久化权值线段树,每个版本 存储前 个长度为 的子段的哈希值。
查询时,只需检查版本 与 之间是否包含目标哈希值即可。
算法步骤
- 读入序列,预处理哈希数组 和幂数组 。
- 对每个长度为 的子段计算哈希值,插入可持久化线段树。
- 对于每个询问:
- 计算嘲讽方案的哈希值 。
- 若区间长度小于 ,直接输出
"No"(不会尴尬)。 - 否则在线段树中查询区间 是否包含 。
- 若存在则输出
"No",否则输出"Yes"。
时间复杂度
- 预处理:( 为哈希值域)
- 每次查询:
- 总体可行,满足数据范围 的要求。
关键点
- 利用哈希 比较任意长度为 的子段。
- 通过可持久化线段树实现区间存在性查询,避免了暴力匹配的低效。## 题解:花神的嘲讽计划
核心思路
本题要判断在序列的某个区间 中,是否存在长度为 的连续子段与给定的嘲讽方案完全匹配。
主要方法
-
滚动哈希(Rabin-Karp)
将序列中每个长度为 的子段通过哈希函数映射为一个无符号长整数(),便于快速比较。 -
可持久化线段树
建立可持久化权值线段树,每个版本 存储前 个长度为 的子段的哈希值。
查询时,只需检查版本 与 之间是否包含目标哈希值即可。
算法步骤
- 读入序列,预处理哈希数组 和幂数组 。
- 对每个长度为 的子段计算哈希值,插入可持久化线段树。
- 对于每个询问:
- 计算嘲讽方案的哈希值 。
- 若区间长度小于 ,直接输出
"No"(不会尴尬)。 - 否则在线段树中查询区间 是否包含 。
- 若存在则输出
"No",否则输出"Yes"。
时间复杂度
- 预处理:( 为哈希值域)
- 每次查询:
- 总体可行,满足数据范围 的要求。
关键点
- 利用哈希 比较任意长度为 的子段。
- 通过可持久化线段树实现区间存在性查询,避免了暴力匹配的低效。
-
- 1
信息
- ID
- 6036
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者