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的主要内容,如果未能解决你的问题,请参考以下文章

Poi2010 Antisymmetry

[POI2010] Antisymmetry

bzoj 2084: [Poi2010]Antisymmetry -- manacher

BZOJ 2084 [Poi2010]Antisymmetry(manacher)

bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp)

反对称 Antisymmetry