ことばがありあまれどなお、 このゆめはつづ|

trsins

园龄:3年10个月粉丝:18关注:2

【做题记录】万径人踪灭

  • P4199 万径人踪灭

    • 算法:FFT,manacher

题目:

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

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

  2. 不能是连续的一段。

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

n105

题解:

upd:修改了部分内容。

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

pk 为满足 i<j,ai=aj 并且 i,j 关于 k 对称的 (i,j) 的个数。

那么对于这 pk(i,j)aiaj 要么同时选(因为对称所以必定满足),要么同时不选,共 2pk 种方案。扣掉空集,共 2pk1 种。

ans=k=0n2pk1

注意一下这里 k 可以为 t2(tN),因为对称轴可以为两个字符中间(比如 1,8 就关于 4.5 对称,也就是 4,5 的中间对称)

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

i,j 关于 p 对称当且仅当 i+j=2x

我们可以根据这个转移。

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

记字符 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,很好地满足了我们的要求。

pk=i+j=2k(ai+aj1)2

非常显然的卷积,FFT 一卷即可。

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

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

本文作者:trsins

本文链接:https://www.cnblogs.com/trsins/p/15776609.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   trsins  阅读(30)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示