\(\\\)

\(Description\)


给出一个长度为 \(N\) 的二进制串,定义一个子串是优秀的,当且仅当其正着看,和倒着按位取反后看结果是一样的,求整个串有多少个优秀的子串。

  • \(N\le 5\times10^5\)

\(\\\)

\(Solution\)


挺好的一道 \(Manacher\) 变式题。

考虑合法的串满足的条件:

  • 首先因为要按位取反,所以一定不存在奇数长度的合法解,因为对称轴的那个字符取反后一定不等于原来的字符。

  • 然后考虑反序的过程,如果没有按位取反实际上这就是一个回文串,我们不妨定义 \(trs\) 数组,表示取反后的答案,有:

    \[trs[0]=1,trs[1]=1,trs[\#]=\#,trs[\ [\ ]=\ [\ ,trs[\ ]\ ]=\ ]\
    \]

然后就可以愉快的 \(Manacher\) 了。

注意,由于第一条性质,回文中心只会选取在添加字符 \(\#\) 的位置。注意计数的时候要去掉 \(\#\) 号的影响,答案累加半径的一半。

\(\\\)

\(Code\)


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define R register
#define gc getchar
#define N 1000010
using namespace std; int n,len,s[N],trs[10],res[N]; long long ans; int main(){
scanf("%d",&n);
char c=gc(); while(!isdigit(c)) c=gc();
s[0]=3; s[1]=2; s[len=2]=c-'0';
for(R int i=2;i<=n;++i){
s[++len]=2; s[++len]=gc()-'0';
}
s[len+1]=4; trs[0]=1; trs[1]=0;
trs[2]=2; trs[3]=3; trs[4]=4;
for(R int i=1,mr=0,p=0;i<=len;i+=2){
res[i]=(i>mr)?1:min(mr-i+1,res[(p<<1)-i]);
while(s[i-res[i]]==trs[s[i+res[i]]]) ++res[i];
if(i+res[i]-1>mr){p=i;mr=i+res[i]-1;}
ans+=(long long)(res[i]>>1);
}
printf("%lld\n",ans);
return 0;
}

[ POI 2010 ] Antisymmetry的更多相关文章

  1. 【POI 2010】反对称 Antisymmetry

    题目: 对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串.比如 $00001111$ 和 $010101$ 就是反对称的, ...

  2. 【POI 2010】 Antisymmetry

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2084 [算法] manacher [代码] #include<bits/std ...

  3. [BZOJ 2083] [POI 2010] Intelligence test

    Description 霸中智力测试机构的一项工作就是按照一定的规则删除一个序列的数字,得到一个确定的数列.Lyx很渴望成为霸中智力测试机构的主管,但是他在这个工作上做的并不好,俗话说熟能生巧,他打算 ...

  4. 解题:POI 2010 Beads

    题面 正反各做一遍哈希来判断,然后在两个哈希值里取一个$max/min$做哈希值,然后每次把子串们的哈希插进$set$里,最后统计集合大小,就可以优秀地在$O(nlog^2$ $n)$中出解了 然后我 ...

  5. 【POI 2010】 Pilots

    [题目链接] 点击打开链接 [算法] 单调队列 [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 3000010 ...

  6. bzoj 2093 [ Poi 2010 ] Frog —— 滑动窗口 + 倍增

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2093 先处理出每个点第一次会跳到哪里: 开一个长度为 K+1 的窗口(因为第一近的实际是自己 ...

  7. 「POI 2010」Bridges

    题目链接 戳我 \(Solution\) 看到"最大值最小",就知道应该要二分 二分之后,对于每个\(mid\),只要计算小于\(mid\)的边,然后在剩下的图中判断有无欧拉回路 ...

  8. Solution -「POI 2010」「洛谷 P3511」MOS-Bridges

    \(\mathcal{Description}\)   Link.(洛谷上这翻译真的一言难尽呐.   给定一个 \(n\) 个点 \(m\) 条边的无向图,一条边 \((u,v,a,b)\) 表示从 ...

  9. POI题解整合

    我也不知道为啥我就想把POI的题全都放到一篇blog里写完. POI 2005 SAM-Toy Cars 贪心,每次选下次出现最晚的. POI 2006 KRA-The Disks 箱子位置单调,所以 ...

随机推荐

  1. Android GIS开发系列计划

    本系列博客的整理与写作计划如下,计划3个月(至2018.2)完成. 第一部分, 入门季 第二部分, Android基础季 第三部分, Data Flow 季 第四部分, 可视化季 第五部分, GIS常 ...

  2. M2Crypto

    M2Crypto = Python + OpenSSL + SWIG M2Crypto is a crypto and SSL toolkit for Python. 上面是M2Crypto的READ ...

  3. 配置-XX:+HeapDumpOnOutOfMemoryError 对于OOM错误自动输出dump文件

    配置-XX:+HeapDumpOnOutOfMemoryError 对于OOM错误自动输出dump文件 学习了:http://blog.csdn.net/stevendbaguo/article/de ...

  4. Vue中删除重复上传的文件

    上传控件: <el-upload class="upload-demo"  :on-change="filesChange"> filesChang ...

  5. [Spring Boot ] Creating the Spring Boot Project : Demo: Creating a REST Controller

    In Spring boot, define a REST API endpoint is pretty easy. package com.globomatisc.bike.controllers; ...

  6. Jquery的运用

    1.首先建一个目录,在目录里面加入JQuery的插件 " jquery-1.7.2.min.js "     2.在html页面去引用这个JQuery插件,并将须要使用JS脚本的J ...

  7. checkstyle+ant生成checkstyle报告

    <?xml version="1.0" encoding="UTF-8" ?> <project name="tibim" ...

  8. c#如何设置成:【当前打开的项目是什么,就默认它为启动项目】,不然新添或打开别的项目都要设置一次启动 [原创]VS2012中将当前选定项目做为启动项

    主菜单→[工具]→[选项]→[项目和解决方案]→[生成并运行],选中“对于新解决方案,使用当前选定的项目作为启动项目” 应该是右键单击解决方案,点击属性打开,选中“当前选定内容”那一项,就可以把你正在 ...

  9. cocos2d-x 3.3 之卡牌设计 NO.4 定时器的使用(清理内存)

    我的卡牌游戏卡牌有两个类.各自是OpenCard和CardSprite. 不知道分成两个是不是有些奇怪.我分开的原因是:一个卡牌用来当手牌,一个用来当场上的牌,这样说是不是更加奇怪了.. 玩家类里定义 ...

  10. android不是内部或外部命令,也不是可执行的程序或批处理文件

    问题: 原因:没有配置好android sdk环境变量 解决方法: (1)切换到android sdk下的tools文件夹,再执行android命令就可以启动Android SDK管理器,我的andr ...