POI 2010反对称 Antisymmetry
Posted zhylj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POI 2010反对称 Antisymmetry相关的知识,希望对你有一定的参考价值。
题目:
对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串。比如 $00001111$ 和 $010101$ 就是反对称的,而 $1001$ 就不是。
现在给出一个长度为 $n$ 的 $0/1$ 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算。
$nle 5 imes 10^5$
分析:
①显然,反对称字符串的长度一定是偶数。
因为若不是偶数,中间的那个数取反永远不会等于自己。
②若有串$S[x-l+1,;x+l]$是反对称字符串,那么$forall k le l,;S[x-k+1,;x+k]$也是反对称字符串。
所以,我们可以直接二分$l$,然后使用$ m Hash$判断字符串是否相等即可。
代码细节较多,我还没写出来。
以上是关于POI 2010反对称 Antisymmetry的主要内容,如果未能解决你的问题,请参考以下文章
bzoj 2084: [Poi2010]Antisymmetry -- manacher
BZOJ 2084 [Poi2010]Antisymmetry(manacher)