随笔分类 -  字符串——manacher

摘要:题面:洛谷 题解: 还是这个性质:对于每个串而言,本质不同的回文串最多只有O(n)个。 所以我们先求出这O(n)个本质不同的回文串,然后对整个串求一次sa。 然后对于每个回文串,求出它的出现次数,更新答案即可。 如何用后缀数组求一个串的出现次数? 因为每个串都必然是某个后缀的前缀。因此我们先找到这个 阅读全文
posted @ 2018-12-04 21:00 ww3113306 阅读(213) 评论(0) 推荐(0)
摘要:题面: 洛谷:[SHOI2011]双倍回文‘ 题解: 首先有一个性质,本质不同的回文串最多O(n)个。 所以我们可以对于每个i,求出以这个i为结尾的最长回文串,然后以此作为长串,并判断把这个长串从中间劈开后左边的一半是否也是一个回文串(判断左边那半的中点的回文半径是否可以跨过当前长串的中点)。 复杂 阅读全文
posted @ 2018-12-04 20:51 ww3113306 阅读(169) 评论(0) 推荐(0)
摘要:题面: 洛谷 一句话题意:找前k大回文串(不要求本质不同) 题解: 我们进行一遍manacher即可求出对于每个回文中心而言的最长回文半径。 我们考虑求出f[i]表示回文半径为i的回文串的个数。 那么对于一个i而言,它可以对哪些长回文半径产生贡献呢? [1, r[i]]。(这个应该是很明显的) 因此 阅读全文
posted @ 2018-12-02 00:22 ww3113306 阅读(160) 评论(0) 推荐(0)
摘要:~~~题面~~~ 题解: 首先有一个直观的想法,如果我们可以求出对于位置i的最长后缀回文串和最长前缀回文串,那么我们枚举分界点然后合并前缀和后缀不就可以得到答案了么? 所以我们的目标就是求出这两个数列, 我们令f[i] 表示以i为结尾的最长回文后缀的长度,g[i]表示以i为开头的最长回文后缀的长度。 阅读全文
posted @ 2018-07-28 18:21 ww3113306 阅读(223) 评论(0) 推荐(0)

知识共享许可协议
本作品采用知识共享署名-非商业性使用-禁止演绎 3.0 未本地化版本许可协议进行许可。