随笔分类 -  字符串 - 回文自动机

摘要:代码如下 cpp include using namespace std; struct PAM { struct state { int len, sz, fail, cnt; // cnt 以该位置结尾的回文子串个数 unordered_map go; state(int _len = 0, i 阅读全文
posted @ 2019-10-22 20:18 shellpicker 阅读(193) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的字符串,求前 K 个长度为奇数的回文子串的长度的乘积是多少。 题解:利用回文自动机,将所有长度的回文串和个数求出来,按照长度排序进行模拟即可。 代码如下 cpp // luogu judger enable o2 include using namespace std 阅读全文
posted @ 2019-04-29 09:14 shellpicker 阅读(180) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的字符串 S,求 S 的最长双回文子串的长度,双回文子串定义为是 S 的一个子串,可以分成两个互不相交的回文子串。 题解:利用回文自动机 len 数组的性质,即:len 数组记录的是以每个点 i 字符结尾的,向左可以延伸的,最长回文串的长度。正向遍历一遍串 S,统计出对 阅读全文
posted @ 2019-04-29 08:11 shellpicker 阅读(292) 评论(0) 推荐(0)
摘要:题目大意:给定一个长度为 N 的字符串,定义一个变量为该字符串的回文子串长度乘以该字串出现的次数,求这个变量的最大值是多少。 题解:学会了回文自动机。 回文自动机是两棵树组成的森林结构,并通过 fail 指针构成一棵回文树结构。 回文树的节点存储的是每个子串的最长回文后缀,最长回文后缀的定义是:除了 阅读全文
posted @ 2019-04-28 19:20 shellpicker 阅读(251) 评论(0) 推荐(0)