POJ3974 Palindrome】的更多相关文章

Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 5121   Accepted: 1834 Description Andy the smart computer science student was attending an algorithms class when the professor asked the students a simple question, "Can you propose an eff…
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权! Description Andy the smart computer science student was attending an algorithms class when the professor asked the students a si…
Palindrome Time Limit: 15000MS   Memory Limit: 65536K Total Submissions: 13157   Accepted: 5028 Description Andy the smart computer science student was attending an algorithms class when the professor asked the students a simple question, "Can you pr…
题目大意就是说在给定的字符串里找出一个长度最大的回文子串. 才开始接触到manacher,不过这个算法的确很强大,这里转载了一篇有关manacher算法的讲解,可以去看看:地址 神器: #include <map> #include <set> #include <stack> #include <queue> #include <cmath> #include <ctime> #include <vector> #inc…
链接:点击这里 #include<iostream> #include<algorithm> #include<stdio.h> #include<cstring> using namespace std; #define maxn 1000005 #define LL long long #define ull unsigned long long ; ull p[maxn+],f[maxn],ff[maxn]; int main(){ p[]=; ;j&…
Manacher算法教程:http://blog.csdn.net/ggggiqnypgjg/article/details/6645824 模板题,Code 附带注释: #include<cstdio> #include<algorithm> #include<cstring> using namespace std; ],a[]; ]; ],zu;//f[i]表示插入一堆#后,以i为中心的最长回文子串の半径长度, //故其减1后就是原串的最长回文子串的答案 //也是…
考虑奇数长度的回文,对于字符串上的每个位置i,如果知道从i开始的后缀和到i为止的前缀反转后的字符串的lcp长度的话,也就知道了以第i个字符为对称中心的最长回文的长度了.因此,我们用在S中不会出现的字符将S和S反转后的字符串拼接起来,得到字符串S',计算S'的sa.于是,从i开始的后缀和到i为止的前缀反转后的字符串就都是S'中的后缀了,利用高度数组,可以轻易地求得它们最长公共前缀的长度. 对于长度为偶数的回文的处理也基本相同. 哈哈哈,MLE+TLE不可避. #include<cstdio> #…
这道题可以$O(nlogn)$,当然也可以$O(n)$做啦$qwq$ $O(nlogn)$的思路是枚举每个回文中心,通过哈希预处理出前缀和后缀哈希值备用,然后二分回文串的长度,具体的就是判断在长度范围内,前缀哈希值和后缀哈希值是否相等. #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<ccty…
传送门 求一个串的最长回文子串的长度 1.后缀数组 把这个串反转后接到原串的后面,中间连一个没有出现过的字符. 然后求这个新字符串的某两个后缀的公共前缀的最大值即可. ——代码 #include <cstdio> #include <cstring> #include <iostream> #define N 2000010 #define max(x, y) ((x) > (y) ? (x) : (y)) int n, m, len, ans; int buc[…
题目链接:http://poj.org/problem?id=3974 题目: 多组询问,每组给出一个字符串,求该字符串最长回文串的长度 数据范围支持$O(nlog n)$ 解法一: 二分+hash 回文串分奇数串和偶数串.对于奇数串,我们枚举它的中点,二分一下这个中点可以向两边扩展多远的距离:对于偶数串,我们枚举它中间两个点靠左的点,同样二分可以扩展的距离,这样时间复杂度就是$O(nlog n)$的了 说起来容易,写起来不是很容易 解法二: 每次跑一遍manacher就好了 说起来容易,写起来…