Description
对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串。比如00001111和010101就是反对称的,1001就不是。
现在给出一个长度为N的01字符串,求它有多少个子串是反对称的。

Input
第一行一个正整数N(N<=500,000)。第二行一个长度为N的01字符串。

Output
一个正整数,表示反对称子串的个数。

Sample Input
8
11001011

Sample Output
7

hint
7个反对称子串分别是:01(出现两次), 10(出现两次), 0101, 1100和001011

HINT

Source
鸣谢 JZP

思路
看起来像回文串……没错,就是回文串,但是这里的回文串是两边相加为1,也可以用manacher算法解决,但是中间的插入的字符应该怎么解决呢?如果把原串的1换成2,0还是0,中间插入1,寻找相加为2的字符就可以了。寻找答案时扫一遍回文串长度数组就可以了。
注意一些地方:
1. 并不是所有的回文串都是符合对称条件的,只有在中心为1时才可以进行计算。例如21010这个串如果计算了中间的0,那么在统计右侧的1时就会将010视为是满足条件的串(实际上并不满足),就会WA;
2. 统计答案时也只需要统计以1为中心的串。

代码

#include <cstdio>const int maxn=500000;char s[maxn+10];
int n,a[(maxn<<1)+10],p[(maxn<<1)+10],id,rmax;
long long ans;int main()
{scanf("%d%s",&n,s+1);a[0]=-3;a[1]=1;for(register int i=1; i<=n; ++i){if(s[i]-'0'){a[i<<1]=2;}else{a[i<<1]=0;}a[i<<1|1]=1;}n=n<<1|1;a[n+1]=-3;p[1]=1;id=1;rmax=1;for(register int i=3; i<=n; i+=2){if(i>rmax){p[i]=1;}else{if(p[(id<<1)-i]<rmax-i){p[i]=p[(id<<1)-i];}else{p[i]=rmax-i;}}while(a[i+p[i]]+a[i-p[i]]==2){++p[i];}if(i+p[i]-1>rmax){rmax=i+p[i]-1;id=i;}}ans=0;for(register int i=1; i<=n; i+=2){ans+=p[i]>>1;}printf("%I64d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376287.html

[Poi2010]Antisymmetry相关推荐

  1. 【bzoj2084】[Poi2010]Antisymmetry

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 1205  Solved: 756 [Subm ...

  2. BZOJ 2084 [Poi2010]Antisymmetry(manacher)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2084 [题目大意] 对于一个01字符串,如果将这个字符串0和1取反后, 再将整个串反过 ...

  3. BZOJ 2084: [Poi2010]Antisymmetry(Hash+二分)

    求一个01序列的子串取反并反转后与原串相同的个数. 很显而易见的是,反转的话只要子串对应的i和n-i+1位相反即可,这个看一下样例能很快看出来. 所以我们正着求一遍hash,反着取反然后求hash. ...

  4. 提高篇 第二部分 字符串算法 第1章 哈希和哈希表

    浅谈字符串哈希_1264Ikaros的博客-CSDN博客_字符串哈希 图书管理-哈希表_handsome·wjc的博客-CSDN博客 字符串哈希 哈希表 - DTTTTTTT - 博客园 图书管理(L ...

  5. Loj一本通刷题记录

    夏令营回来后就不知道怎么回事,状态一直不好== 为了让自己不要太颓废,开个坑在noip前把一本通的好题都刷一遍. 如果想要noip拿省一的话,就要开始好好努力了.加油! 为了节省时间,一些比较简单的东 ...

  6. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  7. 重走长征路---OI每周刷题记录---4月12日 2015

    总目录详见https://blog.csdn.net/mrcrack/article/details/84471041 做题原则,找不到测评地址的题不做.2018-11-28 重走长征路---OI每周 ...

  8. bzoj2091: [Poi2010]The Minima Game DP

    2091: [Poi2010]The Minima Game DP 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2091 思路 这类问题好迷 ...

  9. P3511 [POI2010]MOS-Bridges(网络流/欧拉回路)

    P3511 [POI2010]MOS-Bridges 给出一个图,边正着走和反着走的边权不同,求解最大边权最小的欧拉回路,输出方案. 首先看到最大边权最小我们就可以想到二分答案,然后现在在剩余的图上我 ...

最新文章

  1. swift 错误集合 ------持续更新中
  2. C和C++中读取不定数量的输入数据
  3. 【C++】Visual Studio教程(十二) -代码编辑器功能
  4. antd vue 树更新数据后不展开_很全面的vue面试题总结
  5. Git 在推送(Push)信息的时候提示git did not exit cleanly (exit code 1)的解决办法
  6. c# uri.host_C#| Uri.HostNameType属性与示例
  7. html5 在新标签页打开,Chrome,Javascript,window。在新标签页中打开
  8. C# 值类型和引用类型
  9. linux启动清除指定内存,柴少鹏的官方网站
  10. docker的源配置
  11. Python的并发并行[3] - 进程[0] - subprocess 模块
  12. Mac很好用的音乐转换器:NoteBurner Spotify Music Converter mac
  13. HTTP、HTTPS、SPDY、HTTP2.0、HTTP3.0 —— 通信协议学习笔记(二)
  14. 判定两颗二叉树是否相同
  15. powerha_在IBM PowerHA集群环境中实现存储数据的服务器端缓存
  16. 2014.03.31_一年很快过去了
  17. MySQL的核心日志
  18. Win系统EPUB阅读软件评测
  19. pycharm设置项目编码
  20. 一级计算机无法正常评分,计算机一级评分标准

热门文章

  1. HEOI2018游记
  2. php--------返回404状态
  3. 《VMware Virtual SAN权威指南(原书第2版)》一3.4 VSAN网络配置之vSphere分布式交换机...
  4. PostgreSQL 10.1 手册_部分 III. 服务器管理_第 21 章 数据库角色_21.4. 删除角色
  5. 服务器证书安装配置指南(Nginx)-天威诚信
  6. java08 Set
  7. windows平台HTTP代理server搭建(CCproxy)
  8. heartbeat v2版CRM的高可用web集群的实现
  9. open(/dev/ietctl, O_RDWR) 参数含义
  10. CSS实现跨浏览器兼容性的盒阴影效果