Manacher 算法(http://www.jianshu.com/p/799bc53d4e3d) 对于一个比较长的字符串,O(n^2)的时间复杂度是难以接受的。Can we do better?先来看看解法2存在的缺陷。 1)由于回文串长度的奇偶性造成了不同性质的对称轴位置,解法2要对两种情况分 ...
分类:
编程语言 时间:
2017-08-07 13:52:19
阅读次数:
197
入门manacher最好文章:https://segmentfault.com/a/1190000003914228 我整理了模板代码:HDOJ3068马拉车模板 1 //讲解 https://segmentfault.com/a/1190000003914228 2 //manacher 算法模板 ...
分类:
编程语言 时间:
2017-08-05 22:52:15
阅读次数:
241
题目链接:Codeforces Round #427 (Div. 2) D. Palindromic characteristics 题意: 给你一个串,定义k-th回文串,让你求每个k-th的数量。 题解: manacher处理好后做一下dp就行了。 当然也可以直接dp不用manacher. 1 ...
分类:
其他好文 时间:
2017-08-02 10:17:43
阅读次数:
150
曾经有一个好算法放到我面前,我没有好好珍惜,直到用到的时候才后悔莫及。那就是Manacher(马拉车算法),以O(n)的复杂度计算最长回文字符串。曾经刷Leetcode的时候,室友跟我说了这个算法,但当时那个题目用中间枚举也过了,我就没有在意,直到前天才弄会,写这篇报告之前,我又专门写了一遍马拉车,... ...
分类:
其他好文 时间:
2017-07-23 22:35:12
阅读次数:
171
题目链接:hdu 5785 Interesting 题意: 有一个长度为n的串(n<=10^6),对 1 <= i <= j < k <= length(s) . 如果[i,j]和[j+1,k]都是回文串。则对答案的贡献为 i*k ,求贡献和。 题解: 详细题解传送门 1 #include<bits ...
分类:
其他好文 时间:
2017-07-21 10:30:54
阅读次数:
183
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2084 【题目大意】 对于一个01字符串,如果将这个字符串0和1取反后, 再将整个串反过来和原串一样,就称作“反对称”字符串。 比如00001111和010101就是反对称的,1001就不 ...
分类:
其他好文 时间:
2017-07-12 23:39:07
阅读次数:
398
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=3790 【题目大意】 问最少用几个回文串可以构成给出串,重叠部分可以合并 【题解】 我们先用manacher处理出每个位置最长的回文串, 那么题目就转化为求最少的线段来覆盖全区间,那就是经 ...
分类:
编程语言 时间:
2017-07-12 13:40:53
阅读次数:
229
推导过程推荐看这篇: KMP模板: 推导详细过程推荐看这篇,通俗易懂: 扩展KMP模板: 这个推导过程较简单,网上很多博客都可以快速看懂的。 Manacher模板: ...
分类:
其他好文 时间:
2017-07-10 12:10:26
阅读次数:
231
//给一个序列。让求其最大子序列 //这个序列由三段组成。第一段和第二段对称,第一段和第三段一样 //manacher算法求得p[i] //枚举第二段的起点和长度,得到结果 #include<cstdio> #include<cstring> #include<iostream> using nam ...
分类:
编程语言 时间:
2017-07-09 20:50:10
阅读次数:
224
參见hdu 3068 的manacher算法 代码例如以下: #include<stdio.h> #include<string.h> #define M 110010 int s[M],ss[M*2];//s代表原来的字符串,ss代表插入之后的字符串 int p[M*2]; //表示以i为中心的( ...
分类:
其他好文 时间:
2017-07-09 20:42:18
阅读次数:
163