bzoj 2084 Antisymmetry - Manacher
题目传送门
题目大意
对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串。
问给定长度为$n$的一个01串有多少个子串是反对称的。
这个反对称子串满足回文串的对称性质,和"子结构"性质(例如$s$的$[a, b]\ (a + 2 < b)$一段是反对称的,那么$s$的$[a + 1, b - 1]$也是反对称的)
因此我们可以用Manacher来搞这个问题。只是改一下判断的条件罢了。
当然还有Hash + 二分的做法。
枚举对称中心,然而二分对称长度。
jmr同学有一个很神奇的想法,把1变成01,0变成10,然后跑Manacher,算答案的时候处理一下。
Code
/**
* bzoj
* Problem#2084
* Accepted
* Time: 116ms
* Memory: 3728k
*/
#include <bits/stdc++.h>
#ifndef WIN32
#define Auto "%lld"
#else
#define Auto "%I64d"
#endif
using namespace std;
typedef bool boolean; const int N = 5e5 + ; int n;
int ps[N];
char str[N]; inline void init() {
scanf("%d", &n);
scanf("%s", str + );
} long long res = ;
inline void solve() {
int p = , mx = ;
for (int i = , l, r; i <= n; i++) {
if (i > mx) {
l = i - , r = i;
while (l > && r <= n && str[l] != str[r]) l--, r++, ps[i]++;
} else {
ps[i] = min(mx - i + , ps[p * - i]);
while (i - ps[i] > && i + ps[i] <= n && str[i + ps[i]] != str[i - - ps[i]]) ps[i]++;
}
if (i + ps[i] - > mx)
mx = i + ps[i] - , p = i;
res += ps[i];
/// cerr << i << " " << ps[i] << endl;
}
printf(Auto"\n", res);
} int main() {
init();
solve();
return ;
}
bzoj 2084 Antisymmetry - Manacher的更多相关文章
- bzoj 2084: Antisymmetry 回文自动机
		
题目: Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作"反对称"字符串.比如00001111和010101就是反对称的 ...
 - BZOJ 2084: [Poi2010]Antisymmetry [Manacher]
		
2084: [Poi2010]Antisymmetry Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 609 Solved: 387[Submit] ...
 - BZOJ 2084 [Poi2010]Antisymmetry(manacher)
		
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2084 [题目大意] 对于一个01字符串,如果将这个字符串0和1取反后, 再将整个串反过 ...
 - BZOJ 2084: [Poi2010]Antisymmetry
		
Sol Manacher. \(O(n)\) Manacher很简单啊.改一改转移就可以了. 然后我WA了.一开始天真的认为id只会是奇数,然后就GG. 一组 Hack 数据 3 1 0 0 然后就跳 ...
 - bzoj 2084: [Poi2010]Antisymmetry【回文自动机】
		
manacher魔改,hash+二分都好写,但是我魔改了个回文自动机就写自闭了orz 根本上来说只要把==改成!=即可,但是这样一来很多停止条件就没了,需要很多特判手动刹车,最后统计一下size即可 ...
 - BZOJ 2084 二分+hash OR Manacher
		
思路: 二分+哈希 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> ...
 - bzoj 2084
		
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2084 这道题很容易想到就是一个变种的最长回文字串, 不过回文的规则变成了s[i + p[i] ...
 - bzoj 3325 密码 - Manacher
		
题目传送门 需要root权限的传送点 题目大意 已知一个串,以每个字符为中心的最长回文串长,以及每两个字符中间为中心的最长回文串长.求字典序最小的这样一个串.题目保证有解. 考虑Manacher的过程 ...
 - BZOJ 3160 FFT+Manacher
		
思路: 这道题思路好奇怪--. 我们先要知道关于x (x可以是间隙) 对称的有几对字母 显然暴力是n^2的 那怎么办呢 先把所有'a'看成1 'b'看成0 意外的发现 这不就是卷积嘛 再倒过来搞一搞 ...
 
随机推荐
- 关于new 这个动作怎么理解面试遇到过
			
new的时候 到底发生了什么 function B(name) { this.name = name this.getName = function() { console.log(this.name ...
 - unity3d射线控制移动
			
看看效果图 代码: using UnityEngine; using System.Collections; public class T2 : MonoBehaviour { // Use this ...
 - shell基础:用户自定义变量
 - KMP模板(bin)
			
KMP模板 主要是kuangbin的模板,之后加了一点我的习惯和理解. kmpN() 作用:构造next数组 参数:模式串,模式串长度 kmpC() 作用:返回模式串在主串中出现的次数(可重复) 参数 ...
 - MyBatis基础入门《三》Select查询集合
			
MyBatis基础入门<三>Select查询集合 描述: 代码新增了一个MybatisUtil工具类,查询数据库返回集合的时候,接收数据的三种方式.由于代码会渐渐增多,未涉及改动过的文件不 ...
 - mybatis batchinsert
			
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-/ ...
 - gispro设置标注属性字体样式设置
			
为了应对电子地图和卫星影像的底图,标注样式选择比较关键.挑选了黑字白色晕圈效果.记住不是设置字体轮廓. 因为字体宽度(字粗)有限,设置轮廓直接把字体本身的颜色覆盖了
 - Beta冲刺阶段5.0
			
1. 提供当天站立式会议照片一张 2. 每个人的工作 (有work item 的ID) 成员 昨天已完成的工作 今天计划完成的工作 工作中遇到的困难 具体贡献 郑晓丽 首页活动详情界面的美化 实现首页 ...
 - Java基础(basis)-----关键字this和super的作用
			
1.关键字this 可以用来修饰属性.方法.构造器:this理解为当前对象或当前正在创建的对象 局部变量与成员变量同名,成员变量被屏蔽,用"this.成员变量"的方式访问成员变量 ...
 - 【Hbase学习之三】Hbase Java API
			
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-2.6.5 hbase-0.98.12.1-h ...