回文树 Palindromic Tree
回文树 Palindromic Tree
嗯。。回文树是个什么东西呢。
回文树(或者说是回文自动机)每个节点代表一个本质不同的回文串。
首先它类似字典树,每个节点有SIGMA个儿子,表示对应的字母。
其次它类似自动机,有一个fail指针,一个节点的fail指针指向这个回文串的最长回文后缀。比如说abbaabba的fail指向abba的最后一个a.
利用回文树,我们可以在线性(不太确定是线性还是\(nlogn\)?)的时间内求出所有本质不同的回文子串,以及以每个字母结尾的最长回文子串。
有一个定理,一个长度为n的串中本质不同的回文子串最多只有n个。本质不同是指子串本身不一样(长度不一样或者有字母不一样)。所以回文树最多有\(O(n)\)个节点。
由于回文的性质,回文树可以在线构造,不用像AC自动机那样必须离线构造。
BZOJ 3676
求一个串中,本质不同的回文子串,(出现的次数*长度)的最大值。
直接构造回文树对每个节点记录\(cnt[i]*len[i]\).
BZOJ 2565
求一个串的最长双回文子串,双回文子串可以分成连续的两部分,两部分都是回文串。
构造回文树,对原串统计以位置i结束的最长回文串的\(len[i]+len[i-len[i]]\)的最大值
注意要把原串正反分别搞两次。这就保证了我们对每个点只统计最长回文串就可以。
因为一个最长的双回文子串要么前一半是最长的,要么后一半是最长的,否则可以变得更长。
BZOJ 2160
对所有的偶回文串,统计最长的前k个的长度乘积。
直接构造回文树,每个节点代表着一个本质不同的回文串,排序统计一下即可
codeforces 17E
求一个串中所有相交的回文串的对数。包含算相交
hdu 5157
差不多一个意思
正难则反。相交的不好求我们求不相交的。正反分别扫一边,构造回文树,第一遍记录从某个点开始的回文串数量和,第二遍动态更新答案。\(\Sigma (到i之前为止的回文串*从i+1之后开始的回文串)\)就是所有不相交的回文串对数。总数减去不相交的就是相交的。
URAL 1960
一个串,每次添加一个字母,问这次添加后本质不同的回文串个数。
直接构造回文树,回文树的节点数-2就是本质不同的回文串个数。(因为有两个空节点0和-1)
回文树的一个节点就代表一个本质不同的回文串
codeforces gym 100548G
2014 西安现场赛
求两个字符串的公共回文子串个数
两个串分别建两棵回文树,进行两次dfs(分别从0和-1开始)。每次同时在两棵树上走相同的字母节点,如果能走的通答案就加上\(T1.cnt[x]*T2.cnt[y]\).
因为回文树的形态实际上表示的是回文串自身的结构,如果两棵回文树有长得一样的部分,证明对应的两个串有公共回文子串。
其余题目待补充
回文树 Palindromic Tree的更多相关文章
- Palindromic Tree 回文自动机-回文树 例题+讲解
回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1.求前缀字符串中的本质不同的回文串种类 2.求每个本质不同回文串的个数 3.以下标i为结尾的回文串个数/种类 4.每个本质不同 ...
- ZOJ 3661 Palindromic Substring(回文树)
Palindromic Substring Time Limit: 10 Seconds Memory Limit: 65536 KB In the kingdom of string, p ...
- HDU 5658 CA Loves Palindromic(回文树)
CA Loves Palindromic Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/O ...
- HDU5658:CA Loves Palindromic (回文树,求区间本质不同的回文串数)
CA loves strings, especially loves the palindrome strings. One day he gets a string, he wants to kno ...
- 回文树&后缀自动机&后缀数组
KMP,扩展KMP和Manacher就不写了,感觉没多大意思. 之前感觉后缀自动机简直可以解决一切,所以不怎么写后缀数组. 马拉车主要是通过对称中心解决问题,有的时候要通过回文串的边界解决问题 ...
- HDU 5421 Victor and String(回文树)
Victor and String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/262144 K (Java/Othe ...
- [模板] 回文树/回文自动机 && BZOJ3676:[Apio2014]回文串
回文树/回文自动机 放链接: 回文树或者回文自动机,及相关例题 - F.W.Nietzsche - 博客园 状态数的线性证明 并没有看懂上面的证明,所以自己脑补了一个... 引理: 每一个回文串都是字 ...
- UESTC - 1999 也许这是唯一能阻止乐爷AK的方法( Just for Fun )(回文树)
https://vjudge.net/problem/UESTC-1999 题意 对于一个初始为空的字符串S,你可以进行以下两种操作: 1. 在S的末尾加一个小写字母. 2. 移除S的最后一个字母. ...
- 回文树练习 Part1
URAL - 1960 Palindromes and Super Abilities 回文树水题,每次插入时统计数量即可. #include<bits/stdc++.h> using ...
随机推荐
- Windows系统优化
1.关闭家庭组,因为这功能会导致硬盘和CPU处于高负荷状态: 关闭方法:windows + R 打开运行,输入services.msc回车,右侧窗格找到“HomeGroup Listener”和“Ho ...
- mongodb批量插入数据
年前由于公司业务需要,后台需要获取流水记录,需要每天定时跑脚本,将流水记录跑入库里边,每天大概有个一百万左右,使用的数据库是mongodb,考虑到一条一条录入数据,100多万会跑断,就想着批量录入数据 ...
- 数据库 - 初识MySQL - 介绍/安装
一.介绍: mysql数据库管理软件: 套接字:服务端,客户端:客户端可访问服务端得数据 1.支持并发:操作得是共享得数据 2.处理锁,数据安全,性能 3.用别人得软件,得照着别人得规范,组织自己得语 ...
- EasyUI 的常见标签
1. Resizable 属性 原理: 页面加载完毕后,EasyUI主文件会扫描页面上的每个标签,判断这些标签的class值是否以"easyui-"开头, 如果是,则拿到之后的部分 ...
- 剑指Offer——删除链表中重复的结点
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理 ...
- 原!linux脚本统计
#! /bin/sh first=$ first2=$ input2=$ let second=`date -d "-1 days ago ${input2}" +%Y%m%d` ...
- Spark踩坑记:Spark Streaming+kafka应用及调优
前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark streaming从k ...
- 在firefox安装Selenium IDE
1.打开地址:https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/: 2.点击Add to Firefox: 3.打开Firefox ...
- SQLSERVER2016 无域控AlwaysOn 实施步骤
SQLSERVER2016 无域控AlwaysOn 实施步骤 步骤: 一.安装3个windows server 2016系统 1)在3台机器建立具有administrators权限的相同账号密码,本例 ...
- [Python]返回函数,装饰器拾遗
def lazy_print(*args): def pr(): print(args) return pr 当我们调用lazy_print()时,返回的并不是求和结果,而是求和函数: >> ...