manacher
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
神族文字
题目大意在长度为n的字符串中找一个最长的连续子串,使其为回文串。 n<=5*10^5。M开头的算法manacher裸题。 我们在字符之间以及头尾加入’$’,并在最前和最后加入’&’(这是用来防止越界的)。 设f[i]为新字符串中第i个字符为中心,i-f[i]..i+f[i]这个部分是一个回文串,且f[i]最大。 我们设一个j,使当前j+f[j]最大。 当一个i<=j+f[j]时,我们容易通原创 2015-09-28 12:31:09 · 777 阅读 · 0 评论 -
[bzoj2565]最长双回文子串
题目大意给定字符串求其最长双回文子串,双回文子串的定义是该串可以分成两个串它们都是回文串。题解详见GDKOI2016的项链 我直接超标了(不知所措#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)原创 2016-03-14 14:09:34 · 512 阅读 · 0 评论 -
[GDKOI2016]项链
题目大意对于一个项链,每个珠子上都有字符。删去最少的一段后,使得剩余项链对称(对对称意义不明可参见GDKOI2015 DAY1 T1)manacher+数据结构复制一份原串。 那么显然删除后的串可以对应到新串的一段。 对新串做一次manacher,那么对于两个回文中心i和j,如果j-i<=n,且i+f[i]>=j-f[j],那么可以组成一个j-i长度的对称项链。对于这个用各种数据结构维护即可。#原创 2016-03-01 22:10:58 · 695 阅读 · 0 评论 -
[bzoj4755][JSOI2016]扭动的回文串
题目大意给定两个长度为n的字符串A和B。 扭动的回文串定义为a[i..j]与b[j..k]相接成的字符串为回文串或者a、b的一个回文子串。随便搞搞对a、b分别做一次manacher。 然后我们只需要考虑相接的扭动回文串。 枚举a中一个回文中心,即最后扭动回文串的回文中心,有一个结论最优一定是延伸到最长(即延伸到[l,r]使得[l,r]是最长以当前回文中心为回文中心的回文串)。 接着只需要看a原创 2016-05-23 21:26:45 · 1992 阅读 · 0 评论 -
动物园
题目大意两个字符串a和b,从a中选取一个非空子串,从b中选取一个非空子串,然后拼起来变成回文串,求这个回文串最大长度。SAM先做一遍manacher处理出从某个串某个位置出发最长回文串。 先把b反过来。 然后你注意到这个回文串一定可以表示成c+S+c,其中S是一个回文串,然后c是a或b中选出的子串。 我的做法是把a和b一起丢去做广义SAM,然后计算每个节点是否同时出现在两个串中,并维护righ原创 2017-07-10 10:03:00 · 651 阅读 · 0 评论