BZOJ2084:[POI2010]Antisymmetry
浅谈\(Manacher\):https://www.cnblogs.com/AKMer/p/10431603.html
题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=2084
题目求的就是偶数长度回文串个数。不过匹配从相等变成了异或等于\(1\),在\(Manacher\)算法上稍作改进即可。
时间复杂度:\(O(n)\)
空间复杂度:\(O(n)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=1e6+5;
int n,ans;
int p[maxn];
char s[maxn];
int read() {
	int x=0,f=1;char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
	for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
	return x*f;
}
int main() {
	n=read(),scanf("%s",s+1);
	for(int i=n;i;i--)
		s[i<<1]=s[i],s[(i<<1)-1]='#';
	s[0]='$',s[n<<1|1]='#',n=n<<1|1;
	int id=0,mx=0;
	for(int i=1;i<=n;i++) {
		p[i]=i<=mx?min(mx-i+1,p[(id<<1)-i]):1;
		while(s[i-p[i]]-'0'+s[i+p[i]]-'0'==1||s[i-p[i]]=='#')p[i]++;
		if(s[i]=='#')ans+=(p[i]-1)/2;
	}
	printf("%d\n",ans);
	return 0;
}
BZOJ2084:[POI2010]Antisymmetry的更多相关文章
- bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp)
		bzoj2084/luoguP3501 [Poi2010]Antisymmetry(回文自动机+dp) bzoj Luogu 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一 ... 
- 【BZOJ2084】[Poi2010]Antisymmetry(manarcher)
		[BZOJ2084][Poi2010]Antisymmetry(manarcher) 题面 BZOJ 洛谷 题解 一眼马拉车吧...明显就是在回文串的基础上随便改了改. 似乎还可以魔改回文树,然而我这 ... 
- 【bzoj2084】[Poi2010]Antisymmetry
		2084: [Poi2010]Antisymmetry Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1205 Solved: 756[Submit ... 
- BZOJ2084: [Poi2010]Antisymmetry
		2084: [Poi2010]Antisymmetry Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 187 Solved: 125[Submit] ... 
- [BZOJ2084][Poi2010]Antisymmetry  二分+hash
		2084: [Poi2010]Antisymmetry Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 812 Solved: 503[Submit] ... 
- BZOJ 2084: [Poi2010]Antisymmetry [Manacher]
		2084: [Poi2010]Antisymmetry Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 609 Solved: 387[Submit] ... 
- BZOJ2084[Poi2010]Antisymmetry——回文自动机
		题目描述 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如00001111和010101就是反对称的,1001就不是.现在给出一个长度为N的0 ... 
- BZOJ2084 [Poi2010]Antisymmetry Manachar
		题目传送门 - BZOJ2084 题解 对于一个0我们把它看作01,1看作10,然后只要原串中的某个子串可以通过这两个变换成为回文串就可以满足条件了. 对于转换过的串,Manachar随便弄几下就可以 ... 
- 【哈希  二分】bzoj2084: [Poi2010]Antisymmetry
		可以用manacher或者SA搞过去的:非常有趣的hash题 Description 对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串.比如0000 ... 
随机推荐
- 简单介绍java Enumeration(转)
			Enumeration接口 Enumeration接口本身不是一个数据结构.但是,对其他数据结构非常重要. Enumeration接口定义了从一个数据结构得到连续数据的手段.例如,Enumeratio ... 
- [Android]自定义控件LoadMoreRecyclerView
			RecyclerView是加强版的ListView,用于在有限的窗口中展示大量的数据,而LoadMoreRecyclerView则是为RecyclerView增加了加载更多的功能,先来看效果: 三种加 ... 
- web页面如何打包封闭成手机APP
			所谓的webApp就是html页面跟原生app结合而成的一种应用,这种应用的开发可以节省不少的成本,做出来的app跟原生一样,webApp利用框架技术可以让你有使用app的感觉,具体可以看平安银行的a ... 
- jedis客户端,取redis服务的值
			package com.common.util; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ... 
- HBase 协处理器---基本概念和regionObserver的简单实现
			1. 简介 对于HBase的协处理器概念可由其官方博文了解:https://blogs.apache.org/hbase/entry/coprocessor_introduction 总体来说其包含两 ... 
- UVA 10900 So you want to be a 2n-aire?  (概率dp)
			题意:玩家初始的金额为1:给出n,表示有n道题目:t表示说答对一道题目的概率在t到1之间均匀分布. 每次面对一道题,可以选择结束游戏,获得当前奖金:或者回答下一道问题,答对的话奖金翻倍,答错的话结束游 ... 
- 最大字串和问题(Maximum Subarray)
			问题描述: ind the contiguous subarray within an array (containing at least one number) which has the lar ... 
- ceph 测试
			FIO用法: 随机读: fio -filename=/dev/sdb1 -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -bs=16 ... 
- thinkphp  <eq>   <if>标签 condition中可以写PHP的判断逻辑
			<ul> <volist name="monthArray" id="monthItem"> <if condition=&quo ... 
- Kinect 2.0 默认姿势的中文意思
			RaiseRightHand/RaiseLeftHand 抬起左右手高于肩膀一秒Psi 举起双手高于肩膀一秒Tpose T姿势Stop 右手放下,左手缓慢贴住身侧(腰以下)或者左右调换Wave 挥手 ... 
