
回文自动机
WerKeyTom_FTD
这个作者很懒,什么都没留下…
展开
-
[bzoj3676][APIO2014]回文串
题目大意求出所有回文串在S中出现次数乘长度的最大值。裸题直接回文自动机跑啊!#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--) using namespace std; typedef long lo原创 2016-03-10 22:12:56 · 733 阅读 · 0 评论 -
回文自动机学习小记
前言比manacher多了许多功能。 作为自动机,它能够识别所有回文子串。构造类似后缀自动机、AC自动机一样,回文自动机也有fail指针。 而且,回文自动机是一种每次往两端加字符的神奇trie(不知所措)。 对于自动机内一点所代表的回文串,其fail指针指向的点所代表的回文串是该回文串的最长回文后缀。 首先有两个根节点0和1,0代表空,1代表一种神奇的字符叫做被吞了一个(奥妙重重),用len原创 2016-03-10 22:10:17 · 710 阅读 · 0 评论 -
快乐的JYY
题目大意求所有回文串出现在A、B两个字符串的次数的积的和。裸题做完A后把last变回0,然后再插入B。 每个结点有两个size分别表示在A和B出现的次数,然后就可以统计。#include<cstdio> #include<cstring> #include<algorithm> #define fo(i,a,b) for(i=a;i<=b;i++) #define fd(i,a,b) for(i=原创 2016-03-10 22:11:43 · 534 阅读 · 2 评论 -
基因合成
题目描述回文自动机首先,我们可以认为,每个最终串都是进行若干操作后进行了一次第二个操作后,再在两端插入而得到的。 先对最终串插入回文自动机上,然后做动态规划。 我们设f[i]表示i这个结点所代表的回文串最后一次操作是第二个操作需要多少个操作得到。 注意偶数树的根节点f值为1。 fa[i]表示其在回文树上的父亲,pre[i]表示其最长长度不超过其的长度的一半的回文后缀。pre怎么求呢?显然沿着原创 2016-04-15 12:41:00 · 624 阅读 · 0 评论