【做题记录】万径人踪灭

· · 题解

题目:

在一个只包含 a,b 的字符串中选择一个序列,使得

  1. 位置和字符都关于某条对称轴对称。

  2. 不能是连续的一段。

求有多少个满足要求的序列,答案对 1e9+7 取模。

n\le 10^5

题解:

upd:修改了部分内容。

首先枚举对称轴,假设我们以 k 为对称轴。

p_k 为满足 i<j,a_i=a_j 并且 i,j 关于 k 对称的 (i,j) 的个数。

那么对于这 p_k(i,j)a_ia_j 要么同时选(因为对称所以必定满足),要么同时不选,共 2^{p_k} 种方案。扣掉空集,共 2^{p_k}-1 种。

\therefore ans=\sum\limits_{k=0}^{n}2^{p_k}-1

注意一下这里 k 可以为 \dfrac{t}{2}(t\in \mathbb{N}),因为对称轴可以为两个字符中间(比如 1,8 就关于 4.5 对称,也就是 4,5 的中间对称)

这里有个关于位置对称的性质:

我们可以根据这个转移。

现在位置对称了,还要满足字符对称。

记字符 a1,字符 b0

那么可以发现当两字符相等时仅可能为 1+1=2(aa)0+0=0(bb)。而对于 1+0=1(ab) 的情况则需要排除。

由于 aabb 的情况的数值中间相差了 ab,难以判断是否对称。

这里有个很好用的东西:平方。

平方可以消去数值的负号。

所以我们可以将 aa,bb,ab 所代表的数值各消去 1 ,那么变为 1,-1,0;此时再将它们都平方,那么对称的即变为 1,不对称的还是 0,很好地满足了我们的要求。

\therefore p_{k}=\sum\limits_{i+j=2k}(a_i+a_j-1)^2

非常显然的卷积,\text{FFT} 一卷即可。

但题目中还说“位置不能连续”,说明要扣掉连续的回文子串的个数。

对于回文的对称的子串显然,用 manacher 一弄就好了。