摘要: 介绍 计算字符串每个位置的最长回文串,也可以说是计算所有的回文区间。 原理 感觉算法思想和扩展kmp求extend数组十分类似。 先在第一个位置插入'$'以避免小于0的讨论,再在每一个字符之间都插入'#',为了避免对区间奇偶长度的讨论。 用len[i]代表位置i的最长回文右半区间的长度。由于经过上面 阅读全文
posted @ 2020-04-13 23:44 limil 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 介绍 Knuth-Morris-Pratt字符串查找算法(简称为KMP算法) 用于字符串的模式匹配。相比朴素算法,它的时间复杂度为O(n + m),其中n是文本串长度,m是模式串长度。 原理 kmp通过计算模式串的next数组作为辅助来减少朴素算法中重复的比对。 next数组代表模式串的最长相同真前 阅读全文
posted @ 2020-04-13 23:43 limil 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 作用 用于求一个串的字典序最小的循环串 原理 详见oi-wiki 最小表示法 算法思想是贪心。时间复杂度O(n) int findmin(char s[]) { //n为字符串长度 int k = 0, i = 0, j = 1; while (k < n && i < n && j < n) { 阅读全文
posted @ 2020-04-13 23:40 limil 阅读(183) 评论(0) 推荐(0) 编辑
摘要: "Description" 思路 根据题意,可以转换为在时刻x可以对原数组任意一个数加区间$[1, 2^{x} 1]$中的数。只要求出刚好满足非递减序列每个位置要加的最少值中的最大值所在的最小的x的区间即可。 阅读全文
posted @ 2020-04-13 13:56 limil 阅读(206) 评论(0) 推荐(0) 编辑
摘要: "Description" 思路 这题总觉得有些想法,但是就是写不出来。看了 "题解" 好久才想明白。(以下均图片来自cf "题解" ) 每个度数大于2的结点都是某些叶子结点的LCA,设这个结点为图中的C。虚线代表从叶子结点到C的路径,把路径上面的边全部合并,看成一条边。合并的边的权值就是路径上的边 阅读全文
posted @ 2020-04-13 13:41 limil 阅读(378) 评论(4) 推荐(0) 编辑