字符串:manacher
ProLightsfxjh
这个作者很懒,什么都没留下…
展开
-
Petrozavodsk Winter-2013. Ural FU Contest Problem D. Five Palindromes manacher、一个串切割成5个回文子串、优化
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) 的预处理出 最原创 2016-08-19 23:38:40 · 1454 阅读 · 2 评论 -
UVA - 11475 Extend to Palindrome manacher+贪心
题意:给出一个字符串,在末尾添加尽可能少的字符串,使这个新字符串为回文串,输出新字符串。 manacher+贪心 先用manacher O(n)的跑出原字符串的以每个i为中心的回文子串, 然后应该自己得出的一个manacher的结论if(len[i + j] >= (j - i)/2 + 1) 则字符串s[i......j]为回文子串。 也就是从原串的右边开始,向左跑,找到以sz-1为右端点的最大回文子串,标记为ans开始,则输出原串后,从ans-1开始到0按照顺序每个字符依次输出。 复杂度 O(n)原创 2017-02-16 18:39:15 · 791 阅读 · 0 评论 -
UESTC 1066 Palindromic String manacher
题意:求出前缀的回文重数的和,(回文重数是递归定义的,详见题面)。 manacher 先用manacher跑出所有的回文子串,并把[i,j]的回文子串半径大小存储在了len[i+j]里, 然后从做到右跑一遍,且同时用f[i]表示0~i的回文子串重数, 每次 if(f[(i+1)/2-1] && len[i] >= i/2+1){ f[i] = f[(i+1)/2-1] + 1; ans += f[i]; } else if(len[i] >= i/2+1){ f[i] = 1;原创 2017-07-18 22:03:48 · 789 阅读 · 0 评论