
Manacher
_zidaoziyan
这个作者很懒,什么都没留下…
展开
-
链接
http://blog.youkuaiyun.com/xingyeyongheng/article/details/9310555原创 2015-08-02 14:46:44 · 342 阅读 · 0 评论 -
HDU5340.Three Palindromes
对原串前缀和后缀作一个01标记pre[i],suf[i]表示1-i和i-n能否能形成回文。记以i为中心的回文半径为r(i)。 这些都可以在O(N)时间内求出。也可以使用Hash+二分等方法O(NlogN)内求出。 我们考虑中间一个回文串的位置,只要考虑其前缀回文串的长度,后缀回文串的长度,在判断中间剩余的是否是回文串。#include<bits/stdc++.h> using namespace原创 2015-08-02 14:45:43 · 693 阅读 · 0 评论 -
杂题(好题)
/*给出一个字符串,输出以每个字符为开头的最长回文子串长度。 *多样例。 *每个样例一个字符串 长度不超过100000。 *每个样例输出n行,第i行表示以第i个字符为起点的最长回文子串长度。 **后一个开头的回文串长度最小为前一个回文串长度-2 */ #include #include #include #include #include #include #include #原创 2015-11-09 10:39:55 · 340 阅读 · 0 评论 -
Hdu 5785 Interesting(给你一个字符串,你可以选择这个字符串的一个子串,记为s[l...r] 你可以选择一个k(i<=k< j)将这个子串划分成两半,如果这两半都是回文串,那么答案)
题意:给你一个字符串,你可以选择这个字符串的一个子串,记为s[l…r] 你可以选择一个k(i<=k< j)将这个子串划分成两半,如果这两半都是回文串,那么答案加上l*r, 同一个子串可以被划分多次,问最后的答案为多少。思路:首先我们先对原来的子串进行一次manacher,那么假设以i这个点为分割点 分成s[l…i]和s[i+1…r],那么这个对答案的贡献便为(x1+x2+…+xn)*(y1+y原创 2016-08-02 19:54:55 · 2201 阅读 · 0 评论