字符串科技:Palindrome Series
肝了不知道多久的串串,终于把这个东西学明白了
先挂上大佬的博客:https://www.cnblogs.com/Parsnip/p/12426971.html
这个东西简称我也不知道叫什么,只知道在某些方面真的比较好用
先得知道一系列的前置知识,建议去阅读论文:金策_字符串算法选讲
前置知识是:弱周期定理、字符串Border、Border Series和一个很重要的结论:一个回文串的所有回文后缀可以表示为 O(logn) 段等差数列
然后就可以去做一些奇奇怪怪的优化了,比如对于某个前缀 s[ i ] 来说,需要枚举其所有回文后缀的贡献,如果暴跳fail树的话,会被“aaaa....aaa”这种字符串卡成 O( n ) 级别的,而如果套用上面的理论,则可以将所有的回文后缀视为 logn 段等差数列,因为每段等差数列结束的位置以及前一次结束的位置都相同,所以可以一起维护,时间复杂度下降到了 O( logn )
Border Series最经典的应用就是回文串划分的 dp,其实现也非常的简单,只需要在 PAM 中增加一个函数用于代替暴跳fail树即可
这里用的是葫芦爷的转移代码,相信会PAM的同学肯定不陌生吧,就不多bb了
符号约定:
- len[ i ] 表示节点代表的回文串长度
- fail[ i ] 表示节点的失配指针,即最长的回文后缀,即最大border。
- diff[ i ] = len[ i ] − len[ fail[ i ] ] ,表示一个节点和他最大border长度的差,即所在的等差数列的公差。
- anc[ i ] 表示节点所在等差数列的首项位置,即从 i 开始往根走,保证 diff 值都相同,最终走到的点。
- g[ i ] 维护每个点到链顶的信息,维护的范围是( len[ anc[ i ] ] , len[ i ] ],公差 d = diff[ i ]。
- f[ i ] 表示DP值,即将串 S[ 1 , i ] 进行分割的方案数。
题目的话后续会慢慢补上的,个人喜好,不喜欢在同一篇博客中写多个题目
void trans(int i)
{for(int j=last;j>1;j=anc[j]){g[j]=f[i-len[anc[j]]-diff[j]];if(diff[j]==diff[fail[j]])g[j]=(g[j]+g[fail[j]])%mod;f[i]=(f[i]+(i%2==0)*g[j])%mod;}
}
字符串科技:Palindrome Series相关推荐
- CodeForces - 906E Reverses(回文自动机+Palindrome Series优化dp)
题目链接:点击查看 题目大意:给出两个字符串 s 和 t,每次可以在字符串 s 中选择数个不相交的字串进行反转,问最少需要反转多少次,可以使得字符串 s 和 t 相等,输出最小反转次数以及方案 题目分 ...
- 2019ICPC(沈阳) (回文自动机+Palindrome Series优化dp)
无从追溯的一道题目.. 题目大意:给出一个字符串 s,要求在 s 中选出3个互不相交的回文子串,求长度之和的最大值 题目分析:考虑 n * n 的 dp,dp[ i ][ k ] 为 s[ 1 : i ...
- CodeForces - 932G Palindrome Partition(回文自动机+Palindrome Series优化dp)
题目链接:点击查看 题目大意:给出一个长度为偶数的字符串,问将其分割成 k 个子串记为 a[ 1 ] , a[ 2 ] ... a[ k ] ,且满足 a[ i ] == a[ k - i + 1 ] ...
- SPOJ - IITKWPCE Let us play with strings(回文自动机+Palindrome Series优化dp)
题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,问最少拆分成多少个连续的子串,使得每个子串都是一个回文串 题目分析:dp[ i ] 代表 s[ 1 : i ] 的前缀最少可以拆分成多少个连 ...
- CodeForces - 17E Palisection(回文自动机/Palindrome Series优化dp)
题目链接:点击查看 题目大意:给出一个长度为 n 的字符串,问有多少 相交的回文子串对数 题目分析:背 PAM 模板的时候突然发现了一道模板题,于是顺手写了..正难则反,可以先求出有多少个互不相交的回 ...
- 【Python基础】Pandas向量化字符串操作
一.向量化操作概述 Python内置一系列强大的字符串处理方法,但这些方法只能处理单个字符串,处理一个序列的字符串时,需要用到循环. 那么,有没有办法,不用循环就能同时处理多个字符串呢,pandas的 ...
- python格式化字符串_阿博的Python之路详解String数据类型
这是阿博的第16篇文章 之前分享了Python的Number数据类型,今天给大家详细讲一下我学习到Python的String数据类型.在日常开发当中String类型应该是我们最常使用到的数据类型,那么 ...
- 04_pandas字符串函数;数据合并concat、merge;分组groupby;Reshaping;Pivot tables;时间处理(date_range、tz_localize等)
字符串函数,Series的lower()函数 Series在str属性中提供了一组字符串处理方法,可以方便地对数组中的每个元素进行操作,如下面的代码片段所示.请注意,str中的模式匹配通常默认使用正则 ...
- 数据科学 IPython 笔记本 7.13 向量化字符串操作
7.13 向量化字符串操作 原文:Vectorized String Operations 译者:飞龙 协议:CC BY-NC-SA 4.0 本节是<Python 数据科学手册>(Pyth ...
最新文章
- 开始——“运行”命令集
- 数字图像处理基本运算
- audino python_用 Python 实现 PowerDesigner 数据模型文件的处理
- LeetCode 371. 两整数之和(位运算加法)
- libevent for android
- jmeter jdbc mysql_jmeter获取JDBC响应做接口关联(三)
- filebeat 笔记
- 欧姆定律基本知识(笔记)
- 肉袒牵羊的拼音及解释
- XWiki 6.3 M1 发布,Java 的 Wiki 系统
- tornado使用mysql 连接池(torndb)
- Struts2(一)之认识struts2
- 【VMCloud云平台】SCAP(二)
- 依照ILSVRC2012在matconvnet-1.0-beta23 中用imagenet训练的情况,训练自己的数据
- JSONObject遍历并替换部分json值
- 计算机视觉结合深度学习项目-智能停车场空车位实时识别
- win10系统 该文件没有与之关联的应用来执行该操作,请安装应用,若已经安装应用,请在“默认应用设计“页面中创建关联
- 山东大学数据库课程设计火车票系统报告
- 机器人领域主要国际会议与期刊列表
- DAL(Dynamic Anchor Learning for Arbitrary-Oriented Object Detection)