QiQi and Symmerty
http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23772
题意:给出一个01串,问有多少个子串翻转再取反等于它本身。
题解:老实说这一题,如果深入了解Manacher,这一条就是水题了。首先满足条件的这样的串的特点:1长度一定是偶数2 左右对称的位置之和一定是1,就是一个位置是0另外一个位置是1.这样,如果联系上Manacher的话,求得是最大的回文串,判断时候是对称的位置相等,这里把它换成之和是1就好,另外原来串的位置有加入‘#’,这里可以另外加一个判断,就是遇到这样的字符就直接跳过。然后最重的结果就是长度为偶数那些回文串并且长度大于1,因为这里求出的是最大的长度,所以只要把rad[i]/2就可以得到个数。这里要注意,因为是偶数,所以在匹配的时候只要i只要从奇数位开始就可以了。偶数位不要计算。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define M 1000050
using namespace std;
char str1[M],str[M*];
int rad[M];
void Manacher(int *rad, char *str,int n){
int i,mx=,id;
for(i=;i<n;i+=){//下标从1开始
if(mx>i){
rad[i]=min(rad[*id-i],mx-i);
}
else rad[i]=;
for(;(str[i+rad[i]]-''+str[i-rad[i]]-''==)||str[i+rad[i]]=='';rad[i]++){
if(rad[i]+i>mx){
mx=rad[i]+i;
id=i;
}
}
// printf("**%d %d\n",i,rad[i]);
}
}
int main(){
int nn;
long long ans;
while(~scanf("%d",&nn)){
scanf("%s",str1);
int n=nn*+;
str[]='$';
memset(rad,,sizeof(rad));
for(int i=;i<=nn;i++){
str[*i+]='';
str[*i+]=str1[i];
}
Manacher(rad,str,n);
ans=;
for(int i=;i<n;i++)
if(rad[i]>&&rad[i]&)
// printf("%d %d\n",i,rad[i]);
ans+=(long long)rad[i]/;
printf("%lld\n",ans);
memset(str,,sizeof(str));
memset(str1,,sizeof(str1));
}
return ;
}
QiQi and Symmerty的更多相关文章
- QiQi and Bonds
		
只有链接:http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23685 题意:现在有n个QiQi ...
 - 向Android模拟器中批量导入通讯录联系人
		
使用adb命令向Android模拟器中批量导入通讯录联系人的方法: 使用adb提供的命令, 可以非常方便地从PC中将通讯录批量导入android模拟器中. 首先要先准备好固定格式的vcf文件, 该文件 ...
 - 写在MongoCola在Github上获得200个Star之后
		
MongoCola MongoCola是一个开源的MongoDB管理工具. 由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭. 契机 MongoCola ...
 - python初识第二篇
		
python 编码: 第一次编程有时候会遇到乱码的情况,就可以通过以下的情况来解决 在Windows中默认的就是gbk编码,如果在代码头两部定义utf-8,系统还会按照系统的方式来定义. python ...
 - [转载]opencv MSER
		
最大稳定极值区域(MSER-Maximally Stable Extremal Regions)可以用于图像的斑点区域检测.该算法最早是由Matas等人于2002年提出,它是基于分水岭的概念. MSE ...
 - Github开源Java项目(Disconf)上传到Maven Central Repository方法详细介绍
		
最近我做了一个开源项目 Disconf:Distributed Configuration Management Platform(分布式配置管理平台) ,简单来说,就是为所有业务平台系统管理配置文件 ...
 - str-字符串功能介绍
		
叨逼叨:字符串的各个功能修改不是本身,本身不变,会产生新的值,需要赋值给新的变量来接收 以下 "举例" 是解释每个功能的实例 "举例"下一行是pycharm ...
 - list-列表功能介绍
		
叨逼叨:列表是可变的,针对列表的改变,变得是列表本身,和字符串区别开来 #1.追加 # name = ['alex','eric','seven','qiqi'] # v = name.append( ...
 - 元组-tuple功能介绍
		
#元组 不可变类型 相当于只读的列表,不可被修改,不可被修改哦 ##创建元组最后加,最后加, 形成良好的习惯 """ tuple() -> empty tuple ...
 
随机推荐
- 使用map端连接结合分布式缓存机制实现Join算法
			
前面我们介绍了MapReduce中的Join算法,我们提到了可以通过map端连接或reduce端连接实现join算法,在文章中,我们只给出了reduce端连接的例子,下面我们说说使用map端连接结合分 ...
 - 异步DNS解析的实现
			
在高性能爬虫为什么使用定制DNS客户端一文中阐述了DNS解析是网络爬虫的瓶颈. 目前主要有两种方法来提高DNS解析效率: 1. 基于多线程的DNS 解析 2. 基于NIO的DNS解析 dnsjava中 ...
 - 给自己取了个英文名-Jamy Cai,哈哈~~
			
给自己取了个英文名:Jamy Cai, 同时开始启用新邮箱:Jamycai@outlook.com ~~
 - Nginx性能统计模块http_stub_status_module使用
			
1.进入nginx源码目录,重新配置编译参数 ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module 2.重新编译安 ...
 - 学习java随笔第三篇:java的基本数据类型
			
数据类型 一:整型 1.十进制 2.八进制 八进制数是满8进1,包含0~7的8个数字,在整数前面添加一个"0",表示是八进制数. 3.十六进制 十六进制数是满16进1,包含0~9, ...
 - ASP.NET Web API 通过参数控制返回类型(JSON|XML)
			
一个很实用的技巧,可以在访问web api服务的时候指定返回数据的格式类型,比如 json 或者 xml. 因为 web api 默认返回的是XML格式,但是现在json 比较流行,同时网上也有其他的 ...
 - Quartz.net 定时任务在IIS中未按时执行
			
IIS 垃圾回收机制下解决Quartz.net 的不执行问题 IIS中涉及了垃圾回收机制,quartz.net 在ASP.NET 项目中可以实现线程监控定时执行任务,但是在IIS7.5机一下版本中涉及 ...
 - NodeJS学习笔记—2.AMD规范
			
CommonJS加载模块是同步的,而AMD模块加在是非同步的,允许指定回调函数.由于Nodejs主要用于服务器编程,模块文件一般都存在于本地,所以加载很快,不需要考虑非同步加载,用CommonJS即可 ...
 - OC基础-day04
			
#pragma mark - Day04_01_匿名对象 1. 如果函数有返回值 我们可以不使用变量接收返回值. 而是直接将函数写在要使用其返回值的地方. 2. 正常情况下.我创建对象. 是使用了1 ...
 - Powershell profile.ps1 cannot be loaded because its operation is blocked by software restriction policies
			
Powershell profile.ps1 cannot be loaded because its operation is blocked by software restriction pol ...