回文树 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 ...
随机推荐
- postman 断言
//断言 pm.test("message等于'操作成功'", function () { var jsonData = pm.response.json(); console.l ...
- 初识Java集合框架(Iterator、Collection、Map)
1. Java集合框架提供了一套性能优良.使用方便的接口和类,它们位于java.util包中 注意: 既有接口也有类,图中画实线的是类,画虚线的是接口 使用之前须要到导入java.util包 List ...
- c# 方法传递参数
一.参数的使用方法: 1.值参数(Value Parameter ) 格式:方法名称(参数类型 参数名称[,参数类型 参数名称]) 2.引用参数(Reference Parameter ) 格式:方法 ...
- 19.如何在vue里面调用其他js
可以通过把js放到服务器,然后再html文件中通过链接的形式引入,这是目前我试过成功的唯一方法
- 17.出现fatal signal(SIGSEGV),code 1,fault addr 0x0 in tid 29931的问题
原因是: 在onCreate方法里面调一些东西的时候,有时候系统相关的东西还没有初始化完,你的代码就已经执行了,会出现一些问题 解决方法: 增加延时1s /一.第一步初始化,此处用的是demo的ap ...
- Jenkins的安装及邮件配置
Jenkins介绍 Jenkins,是基于Java开发的一种持续集成工具,用于监控秩序重复的工作,包括: 1).持续的软件版本发布/测试项目. 2).监控外部调用执行的工作. Jenkins安装 j ...
- Jmeter(六)文件上传和下载文件
一.Jmeter上传文件 编写脚本: 首先添加一个线程组,然后在线程组里面添加一个http请求,因为是发送数据,所有是post请求,写好上传的地址,然后写好文件路径 ...
- Linux修改信息
修改时间 sudo date -s MM/DD/YY //修改日期 sudo date -s hh:mm:ss //修改时间 在修改时间以后,修改硬件CMOS的时间 sudo hwclock --sy ...
- 详解MySQL第一篇—MySQL简要介绍及DDL语句
背景:近几年,开源数据库逐渐流行起来.由于具有免费使用.配置简单.稳定性好.性能优良等优点,开源数据库在中低端应用上占据了很大的市场份额,而 MySQL 正是开源数据库中的杰出代表.MySQL 数据库 ...
- appium格式化循环点击