摘要: 出现次数很好处理,就是 $right/endpos$ 集合的大小 那么,直接构建 $SAM$ 求出每个位置的$right$集合大小 直接更新每个节点的$longest$就行了 最后短的可以由长的更新过来就好 cpp include include include include include in 阅读全文
posted @ 2019-05-09 21:55 wawawa8 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 构建后缀自动机,求出后缀树 比较明显的dp 设 $f[i]$ 表示从上而下到达当前点能够满足条件的最优值 只需要检查父亲节点是否在当前串中出现过两次就行了 这个判断用 $endpos$ 来判断 如果出现过超过两次,那么在当前点所掌控的任意一个 $endpos$ 以及前面的区间中 必定出现了超过两次 阅读全文
posted @ 2019-05-09 21:54 wawawa8 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 首先会想到|x|是不递减的。 于是可以枚举长度L。 再每个L设一个断点,xx必定经过两个断点。 两两断点间求最长公共前后缀,这里用hash+二分会快。 然后一波扫过去就好了。 如果找到了,hash就要重构。 来计算一下复杂度。 一共有O(n log n)个断点,每个求最长公共前后缀复杂度log,这一 阅读全文
posted @ 2019-05-09 17:56 wawawa8 阅读(254) 评论(0) 推荐(0) 编辑