manacher、一个串切割成5个回文子串、优化
第一次使用manacher 嘿嘿??
为了方便处理奇偶的情况, 我们把 区间 [ i , j ] 的回文子串半径保存在 len[ i + j ] 里,
if(len[ i + j ] >= (j - i)/2 + 1) 则[ i , j ] 为回文串
可以O(n)的处理出len 所有中心的回文子串长度
这里先跑一边 manacher(n) 得到 len[]数组
然后O(n) 的预处理出 第一个字符串的右端点 i,放在一个队列里
并且O(n) 的预处理出 最...
【题目大意】 在一个仅仅含有a,b的字符串里选取一个子序列,使得: 1.位置和字符都关于某条对称轴对称; 2.不能是连续的一段。 【思路】 不连续的回文串的个数=总的回文串个数-连续回文串的个数。 后者可以用manacher在O(n)时间里面求出。求的是个数不是最长串,和之前写的几道不怎么一样,注意 ...
分类:
其他好文 时间:
2016-08-20 00:10:45
阅读次数:
226
题意:给你一个串,若里面有两个相邻的没有交集的回文串的话,设为S[i...j] 和 S[j+1...k],对答案的贡献是i*k,就是左端点的值乘上右端点的值。 首先,如果s[x1....j]、s[x2....j]、s[x3....j]....s[xn....j]、是回文串,而且s[j+1...y1] ...
分类:
其他好文 时间:
2016-08-17 23:09:17
阅读次数:
163
bzoj2160拉拉队排练 题意: 给一个字符串,求最长的k个回文子串(此处回文子串长度必须为奇数)长度的乘积。字符串长度≤1000000 题解: 先用manacher预处理出第i个字符为中心的最长回文子串一端长度p[i],然后cnt[1]++,cnt[2*p[i]+1]--,最后cnt[i]+=c ...
分类:
其他好文 时间:
2016-08-17 22:38:11
阅读次数:
118
找出紧挨的三个回文串,例如abccbaabc ,形如ABA格式,其中AB为回文串。计算最长的长度。 首先用Manacher处理回文半径。然后就是找到两个点,都是偶数的回文串,并且共享了中间一段。 之后拿set搞一下就可以了= = ...
分类:
其他好文 时间:
2016-08-08 20:54:05
阅读次数:
159
【题目大意】 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度。 【manacher知识点】 ①mx - i > P[j] 的时候,以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中,由于 i 和 j 对称,以S[i]为中心的回文子串必然包含在以S[i ...
分类:
其他好文 时间:
2016-08-07 19:58:27
阅读次数:
240
题目大意:给一个字符串,求所有相邻两回文子串的外侧下标之积的和 题目分析:另L[i]为所有以 i 为右端点的回文字串的左端点之和,同理,另R[i]表示所有以 i 为左端点的回文子串的右端点之和。显然,答案为sigma(L[i]*R[i+1]) 其中,1<=i<length(字符串)。求出L和R是关键 ...
分类:
编程语言 时间:
2016-08-06 11:13:37
阅读次数:
159
寻找三元组(i,j,k),使得(i,j)(j,k)都是回文字串,其中i<=j<k. 可以发现,对于每一位i,只要预处理出来有多少个以i为右端的回文串和以i为左端的回文串。把那些串的另一端的坐标和计算出来就可以了。 然后ans = ∑cntR[i]*cntL[i+1] 这里cntR[i]记录以i为右端 ...
分类:
其他好文 时间:
2016-08-05 21:14:59
阅读次数:
203
题意:求给定字符串的三元组(I,J,K) 使得S[i..j] 和 S[j+1..k] 都是回文串。求所有满足条件的三元组 ∑(i*k) 题解:求出以j为结尾的回文串起始位置的和记为lv[j],和以j+1为开始的回文串末位置的和rv[j+1] 答案就是∑[j:1-n](lv[j] * rv[j+1]) ...
分类:
其他好文 时间:
2016-08-03 23:55:12
阅读次数:
188