以Hihocoder 1032为例。 manacher算法: 设一个数组p,p[i]表示以第i个字符为中心的最大半径,最大的p[i]就是最长的回文子串了。 不过这样要用两个循环,时间复杂度是(n*n)。 而manacher算法可以快速的求p[i],具体的可以参考这里。 AC代码: ...
分类:
编程语言 时间:
2017-07-06 20:48:23
阅读次数:
247
/*首先呢,手动@一下逸安dalao。前几天一是考试没时间,再就是这个算法我只是懂,没写过题所以不敢写一个专题博客。 终于抽出时间写一下这个noip基本不会涉及的算法啦*/ 首先我们知道回文的定义:正反读都是一样的字符串叫做回文串。如:madam,lol,oppo,zz,甚至连单字符都可以被称为回文 ...
分类:
编程语言 时间:
2017-07-02 16:14:47
阅读次数:
231
hdu:3068 #include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std;int min(int a,int b){ return a<b?a:b;}char s[ ...
分类:
编程语言 时间:
2017-06-27 08:11:58
阅读次数:
145
Manacher算法: 参考资料:https://segmentfault.com/a/1190000003914228 http://www.cnblogs.com/biyeymyhjob/archive/2012/10/04/2711527.html 代码: 动态规划: dp[i][j] = 1 ...
分类:
其他好文 时间:
2017-06-24 13:19:54
阅读次数:
160
本文是我对博友 BIT祝威 和Grandyang ,以及寒小阳关于最长回文子串上关于马拉车算法理解的整理,若是对我的整理有所不懂得,建议去看BIT祝威的博客,很详细,以下纯属个人不成熟的理解。 首先,得先了解什么是回文串(我之前就不是很了解,汗)。回文串就是正反读起来就是一样的,如“abba”。关于 ...
分类:
编程语言 时间:
2017-06-24 10:00:08
阅读次数:
243
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longes ...
分类:
其他好文 时间:
2017-06-23 23:47:23
阅读次数:
219
HDU 5371 题意: 定义一个序列为N序列:这个序列按分作三部分,第一部分与第三部分同样,第一部分与第二部分对称。 如今给你一个长为n(n<10^5)的序列,求出该序列中N序列的最大长度。 思路: 来自官方题解:修正了一些题解错别字(误 先用求回文串的Manacher算法。求出以第i个点为中心的 ...
分类:
其他好文 时间:
2017-06-13 00:05:13
阅读次数:
224
听说这道题可以用树状数组什么鬼的做,反正我不会,还是老老实实打manacher+贪心大法吧…… 我们只要在跑manacher的过程中,用一个结构体(也可以直接用数组)来记录以每个字符为对称轴的最长回文的最左端和最右端,然后就得到了一些线段,于是问题完美地转换成了求取最少段的线段来完全覆盖一个区间了, ...
分类:
其他好文 时间:
2017-06-08 00:16:47
阅读次数:
145
这道题哇 其实是裸的manacher 无论怎么变 是回文的就是回文 所以 特殊处理一下输出就好了 不过最后的左右端点l,r。l=(p-p[pos]+2)/2-1,r=(p+p[pos]-2)/2-1; 这个自己看一下就okay呐 #include<cstdio> #include<cstring> ...
分类:
编程语言 时间:
2017-06-07 20:52:41
阅读次数:
198
【算法】回文树 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn=100010; struct trees{int len,fail,t[260];}t[maxn]; ...
分类:
编程语言 时间:
2017-06-05 18:01:02
阅读次数:
182