【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=2084

【题目大意】

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

【题解】

  修改manacher的判定条件,对该串进行计算即可。

【代码】

#include <cstdio>
#include <cstring>
using namespace std;
const int N=1000010;
int n,m,i,r,p,f[N<<1];
long long ans;
char a[N],s[N<<1];
int min(int a,int b){return a<b?a:b;}
bool check(char x,char y){if(x=='#'&&y=='#')return 1;if((x-'0')+(y-'0')==1)return 1;return 0;
}
void manacher(char *a){for(i=1;i<=n;i++)s[i<<1]=a[i],s[i<<1|1]='#';s[0]='$',s[1]='#',s[m=(n+1)<<1]='&';for(r=p=0,f[1]=1,i=1;i<m;ans+=f[i++]>>1){for(f[i]=r>i?min(r-i,f[p*2-i]):0;check(s[i-f[i]],s[i+f[i]]);f[i]++);if(i+f[i]>r)r=i+f[i],p=i;//printf("%d\n",f[i]); }
}
int main(){scanf("%d",&n);scanf(" %s",a+1); manacher(a);printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/forever97/p/bzoj2084.html

BZOJ 2084 [Poi2010]Antisymmetry(manacher)相关推荐

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

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

  2. 最长回文字符串——马拉车(Manacher)算法

    最长回文字符串--马拉车(Manacher)算法 说来惭愧,都快要毕业了才写第一篇博客... 回文串 回文串呢,就是在一个字符串中,左半部分和右半部分是镜像对称的字符串,比如abcba,就是一个已c为 ...

  3. 算法练习day18——190409(Manacher)

    1.Manacher算法 一个串中,找到最长的回文子串. 1.1 暴力解决 得解决长度为奇数的回文和长度为偶数的回文. 1.1.1 奇回文 i位置自己肯定构成回文:长度为1 i+1位置和i-1位置相不 ...

  4. 小G的项链(Manacher)

    我看网上也没有写这个题的,顺便写一下(可能是大佬都觉得太简单了 ) 链接:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO ...

  5. 马拉车(manacher)算法——最长回文(hdu3068)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目描述: Problem Description 给出一个只由小写英文字符a,b,c...y ...

  6. 彻底搞懂马拉车(Manacher)

    Manacher算法,又叫"马拉车",它可以在时间复杂度和空间复杂度都是O(n)的情况下,求出一个字符串的最长回文串长度. 回文串的基本解法 以每一个点为中心对称点,每次保留最长回 ...

  7. 马拉车(manacher)算法

    本篇博客基于这篇博客的理解. 马拉车可以在线性时间内找到字符串的最大回文子串. 先来说说它是如何工作的. 其实本质上马拉车算是一个很优美的暴力算法,它从头到尾遍历一遍字符串的每一个元素,然后把当前遍历 ...

  8. KMP BFPRT 马拉车(Manacher)

    目录 1.KMP: Ⅰ.某个字符的"指标" ⅠⅠ.KMP的使用方法: ⅠⅠⅠ.理由1: ⅠⅤ.理由2: Ⅴ."指标的获取": ⅤⅠ.代码部分: 2.BFPRT( ...

  9. BZOJ 1049 数字序列(LIS)

    题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1049 题意:给出一个数列A,要求:(1)修改最少的数字使得数列严格递增:(2)在( ...

最新文章

  1. mysql安装后第一次操作_MySQL数据库之mysql 安装成功以及第一次安装成功初始化密码操作...
  2. BUUCTF(PWN)suctf_2018_stack
  3. EventBus1.0.1源码解析
  4. OpenGL渲染管线,着色器,光栅化等概念理解
  5. UVA1585 Score
  6. java本地方法不能是final_Java final关键字
  7. springboot学习过程中遇到的错误集
  8. (22)Vue.js 综合案例:TodoMVC
  9. (137)FPGA面试题-Verilog HDL中function和task的区别(一)
  10. Python实现恋爱AA公式
  11. (进阶)LeetCode(338)——比特位计数(JavaScript)
  12. 裴礼文《数学分析中的典型问题与方法》P61~90
  13. 建立书签链接的html语言,书签链接
  14. html refresh原理,HTML meta refresh 刷新与跳转(重定向)页面
  15. MAC锁屏不断网(快捷键启用屏保)
  16. 赴日技术签证全攻略!
  17. Bridging the Gap Between Anchor-based and Anchor-free Detection
  18. Kal设置启动时输出日志,不显示logo
  19. 使用for循环加if-else实现两个数最小公倍数和最大公约数的计算
  20. C语言中变量的作用域和生命周期

热门文章

  1. 强大的vim配置,让编程更随意
  2. Mercurial 2.4.2 发布,2.5 候选版发布
  3. MySQL使用正则表达式
  4. JAVA调用R语言之Rserve
  5. mc pe Linux服务器,MC 基岩版(PE) 服务器来了
  6. css选择器权重排序_CSS选择器的权重与优先规则
  7. php imap 安装_linux 下安装PHP的IMAP扩展实现邮件收发
  8. 中高德地图只显示某一城市_小O地图 - 城市交通态势数据查询及下载
  9. java面试的基本问题_java面试常见基础问题之一
  10. java条件语句例题_Java-条件语句、循环语句练习