码迷,mamicode.com
首页 > 其他好文 > 详细

【POI 2010】反对称 Antisymmetry

时间:2018-08-26 11:54:51      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:现在   偶数   判断   for   ora   字符串   tis   就是   一个   

题目:

对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串。比如 $00001111$ 和 $010101$ 就是反对称的,而 $1001$ 就不是。
现在给出一个长度为 $n$ 的 $0/1$ 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算。

$n\le 5\times 10^5$

分析:

①显然,反对称字符串的长度一定是偶数。

因为若不是偶数,中间的那个数取反永远不会等于自己。

②若有串$S[x-l+1,\;x+l]$是反对称字符串,那么$\forall k \le l,\;S[x-k+1,\;x+k]$也是反对称字符串。

所以,我们可以直接二分$l$,然后使用$\rm Hash$判断字符串是否相等即可。

代码细节较多,我还没写出来。

【POI 2010】反对称 Antisymmetry

标签:现在   偶数   判断   for   ora   字符串   tis   就是   一个   

原文地址:https://www.cnblogs.com/zhylj/p/9536516.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!