题目传送门 通往???的传送点 通往神秘地带的传送点 通往未知地带的传送点 题目大意 给定一个串$s$,要求将$s$划分为$t_{1}t_{2}\cdots t_{k}$,其中$2\mid k$,且$t_{i} = t_{k - i}$,问方案数. 直接做不太好做.虽然可以$O(n^{2})$进行动态规划. 考虑做一步转化:设$s' = s_{1}s_{n}s_{2}s_{n - 1}\cdots s_{n / 2}s_{n / 2 + 1}$. 然后它的一个偶回文划分可以和原来的划分一一对应.…
CF932G Palindrome Partition(回文自动机) Luogu 题解时间 首先将字符串 $ s[1...n] $ 变成 $ s[1]s[n]s[2]s[n-1]... $ 就变成了求将字符串全部划分为偶回文串的方案数. 建回文树大力跳$ fail $ 直接 $ dp $ 的复杂度是十分优秀的 $ O ( n ^ {2} ) $. 优化不容易想到. 考虑字符串上第 $ j $ 位为结尾的所有回文子串,毫无疑问它们在树上是一条链. 但它有个更重要的性质. 其中所有长度 $ > j…
题意:给定一个串,把串分为偶数段 假设分为$s_1,s_2,s_3....s_k$ 求满足$ s_1=s_k,s_2=s_{ k-1 }... $的方案数模$10^9+7$ $|S|\leq 10^6$ 首先想到将原串变为$s_1 s_n s_2 s_{n-2}...$ 这样问题变成了求将新串分成任意个偶数长度回文串的方案数 对于这个问题,我们先给出两个结论 $1.$一个回文串S的后缀$T$如果是回文串等价于$T$是$S$的$border $ $2.$将一个串$S$的所有$borde$r按长度从…
题意 找如下子串的个数: (l,r)是回文串,并且(l,(l+r)/2)也是回文串 思路 本来写了个回文树+dfs+hash,由于用了map所以T了 后来发现既然该子串和该子串的前半部分都是回文串,所以该子串的前半部分和后半部分是本质相同的! 于是这个log就去掉了 代码 #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring>…
[CF932G]Palindrome Partition 题意:给你一个字符串s,问你有多少种方式,可以将s分割成k个子串,设k个子串是$x_1x_2...x_k$,满足$x_1=x_k,x_2=x_{k-1}...x_i=x{k-i+1}$. $|s|\le 10^6$ 题解:设字符串的长度为n,考虑字符串$T=s_1s_ns_2s_{n-1}...$.问题就转化成了:求将原串划分成若干个长度为偶数的回文子串的方案数. 首先我们有一种暴力的想法,设f[i]表示将前i个字符分成若干个回文子串的方…
题目传送门 题意:给出一个字符串,将字符串中所有的回文子串全部放入一个集合里,去重后.问这个集合里有几对<a,b>,使得a是b的子串. 思路:一开始想偏了,以为只要求每个回文串的回文后缀的数量加去掉开头结尾字符的数量就可以了.事实上,如果我们把去掉两个字符的字符串称为父节点,那么父节点的回文后缀和自己也能形成这样的pair. 设一个字符串x能产生的贡献为$dp[x]$,我们考虑x能产生的贡献是什么呢? 一个是和自己本身的所有回文后缀结合产生的贡献,这一个可以通过回文树上跳fail来完成. 一个…
[CF932G]Palindrome Partition(回文树,动态规划) 题面 CF 翻译: 给定一个串,把串分为偶数段 假设分为了\(s1,s2,s3....sk\) 求,满足\(s_1=s_k,s_2=s_{k-1}......\)的方案数 题解 反正我是不会做 基本就是照着\(laofu\)的打了一遍(laofu太强啦) 这题分成了两个步骤 如果直接分\(k\)段我们是没法直接判断的 假设两段\(s_i,s_{k-i+1}\) 因为\(s_i=s_{k-i+1}=x_1x_2.....…
题意: 给出一个长度为偶数的字符串S,要求把S分成k部分,其中k为任意偶数,设为a[1..k],且满足对于任意的i,有a[i]=a[k-i+1].问划分的方案数. n<=1000000 题解: 反正我是不会做   (我是转载的yyb博客,巨佬写的超级超级详细)基本就是照着laofulaofu的打了一遍(laofu太强啦) 这题分成了两个步骤如果直接分kk段我们是没法直接判断的假设两段si,sk−i+1因为si=sk−i+1=x1x2.....xj  假设si的开始位置为p假设原串S的长度为nsi…
目录 题目链接 题意 思路 代码 题目链接 传送门 题意 问\(s\)串中所有本质不同的回文子串中有多少对回文子串满足\(a\)是\(b\)的子串. 思路 参考代码:传送门 本质不同的回文子串肯定是要用回文树的啦- 在建好回文树后分别对根结点为\(0,1\)的子树进行\(dfs\),处理出以每个结点为根结点的子树的大小\(sz\)(也就是说有多少个回文子串以其为中心)和其\(dfs\)序,回文子串包含除了作为其他回文子串的中心被包含外,还可以不作为中心被包含,而这一部分则需要靠回文树的\(fai…
题意:给定字符串Str,求出回文串集合为S,问S中的(a,b)满足a是b的子串的对数. 思路:开始和题解的思路差不多,维护当前后缀的每个串的最后出现位置,但是不知道怎么套“最小回文分割”,所以想到了树剖,但是树剖不好同时维护“最后出现的次数”,“查询左端点>=L”的位置数.   所以GG.  那么从图论的角度考虑,有向图,问多少个点可以到达的关系点对,(我怎么只会bitset解决小数据问题). 1,而回文树的特殊性在于,每个点只有一个fail(回边),25个next(出边),那么把回边抽离出来建…