1 条题解
-
0
题解
思路
因为每个数字至少为 ,数字和为 的字符串长度至多为 。可以 DFS 枚举所有由 到 组成、数字和恰为 的字符串,再检查它的每个真子串:若某个真子串的数字和整除 ,该字符串就不是 -prime。 时留下的模式串数量很少。
子任务 1 枚举原串的所有子序列,直接判断其中是否出现任一 -prime 模式,取删除数最小值。
子任务 2 收集所有模式串的真前缀。状态是当前保留串的最长后缀,并且该后缀是某个模式串的前缀。保留一个字符后,枚举后缀找到新状态;若形成完整模式则禁止。删除字符则状态不变且代价加一。
满分算法把所有 -prime 模式插入 Aho-Corasick 自动机。失败指针上的终止标记向下传播后,只要自动机状态不是终止状态,当前保留串就不含任何禁用模式。
设 为处理当前前缀后自动机处于状态 的最少删除数。对下一个字符有两种转移:
- 删除它:仍在 ,代价加一;
- 保留它:沿自动机转移,若目标状态不是终止状态则代价不变。
最终所有状态的最小值就是答案。
做法
- DFS 枚举所有数字和为 的字符串并筛出 -prime 模式。
- 把模式串插入 Aho-Corasick 自动机,构建失败指针和完整转移表。
- 传播失败链上的终止标记。
- 扫描原串,用滚动数组进行“删除或保留”的最短路式 DP。
- 输出最后一层状态的最小值。
复杂度
子任务 1 的时间复杂度为 ,空间复杂度为 。
子任务 2 设显式前缀状态数为 ,时间复杂度为 ,空间复杂度为 。
满分算法设 Aho-Corasick 自动机节点数为 ,时间复杂度为 ,空间复杂度为 。
- 1
信息
- ID
- 1244
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者