1 条题解
-
0
题解
思路
若公共前缀长度为 ,则字符串前缀 必须在 中出现至少 次且这些出现两两不重叠。用 Z 函数可以常数判断从任一位置开始是否匹配此前缀,贪心选择最靠左的合法出现即可得到最多出现次数。
做法
时直接比较字符; 时枚举 并贪心扫描,复杂度 。
满分算法令 。对 ,二分 并用贪心检查;对 ,直接计算它最多支持的段数 ,更新 。最后从大到小取后缀最大值,因为能支持 段也能支持更少段。
正确性说明
任何划分的公共前缀都对应从位置零开始的若干不重叠前缀出现;反之,把这些出现作为各段起点,并把间隙分配给前一段即可形成划分。最早结束的贪心不会减少后续可选空间,因此得到最大出现次数。平方分治覆盖所有答案:若 由第一部分求出,否则 ,必被第二部分枚举。
复杂度
每组时间复杂度 的宽松上界,空间复杂度 。
- 1
信息
- ID
- 1453
- 时间
- 3000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者