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的更多相关文章

  1. QiQi and Bonds

    只有链接:http://sdu.acmclub.com/index.php?app=problem_title&id=961&problem_id=23685 题意:现在有n个QiQi ...

  2. 向Android模拟器中批量导入通讯录联系人

    使用adb命令向Android模拟器中批量导入通讯录联系人的方法: 使用adb提供的命令, 可以非常方便地从PC中将通讯录批量导入android模拟器中. 首先要先准备好固定格式的vcf文件, 该文件 ...

  3. 写在MongoCola在Github上获得200个Star之后

    MongoCola MongoCola是一个开源的MongoDB管理工具. 由于最初版本的设计失误,所以现在只能在Windows上使用,虽然可以在OSX上使用,但是非常别扭. 契机 MongoCola ...

  4. python初识第二篇

    python 编码: 第一次编程有时候会遇到乱码的情况,就可以通过以下的情况来解决 在Windows中默认的就是gbk编码,如果在代码头两部定义utf-8,系统还会按照系统的方式来定义. python ...

  5. [转载]opencv MSER

    最大稳定极值区域(MSER-Maximally Stable Extremal Regions)可以用于图像的斑点区域检测.该算法最早是由Matas等人于2002年提出,它是基于分水岭的概念. MSE ...

  6. Github开源Java项目(Disconf)上传到Maven Central Repository方法详细介绍

    最近我做了一个开源项目 Disconf:Distributed Configuration Management Platform(分布式配置管理平台) ,简单来说,就是为所有业务平台系统管理配置文件 ...

  7. str-字符串功能介绍

    叨逼叨:字符串的各个功能修改不是本身,本身不变,会产生新的值,需要赋值给新的变量来接收 以下 "举例" 是解释每个功能的实例   "举例"下一行是pycharm ...

  8. list-列表功能介绍

    叨逼叨:列表是可变的,针对列表的改变,变得是列表本身,和字符串区别开来 #1.追加 # name = ['alex','eric','seven','qiqi'] # v = name.append( ...

  9. 元组-tuple功能介绍

    #元组 不可变类型 相当于只读的列表,不可被修改,不可被修改哦 ##创建元组最后加,最后加, 形成良好的习惯 """ tuple() -> empty tuple ...

随机推荐

  1. C# - 类型

    C#是一门使用OOP技术的编程语言(Object Oriented Programming 面向对象编程)面向对象最重要的特性就是接口.继承.多态 C#中所有的事物都可以看做是一个对象 对象由类型来创 ...

  2. WPF中将DataGrid导出Excel

    int number = 1; private void MenuItem_Click(object sender, RoutedEventArgs e) { #region string path ...

  3. Android 自定义View修炼-自定义HorizontalScrollView视图实现仿ViewPager效果

    开发过程中,需要达到 HorizontalScrollView和ViewPager的效果,于是直接重写了HorizontalScrollView来达到实现ViewPager的效果. 实际效果图如下: ...

  4. Mysql解压版的安装

    Mysql解压版的安装 ——@梁WP 1.解压mysql到合适的地方 2.右击计算机-属性-高级系统设置-高级-环境变量,弹出“环境变量”对话框,修改下面的系统变量 3.新建MYSQL_HOME变量, ...

  5. BZOJ 1044 木棍分割

    二分+dp. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm ...

  6. 浅析Activity不可见与透明

    http://blog.csdn.net/lincyang/article/details/6868582 看见标题也许你会有疑问,不可见和透明不是一个意思吗? 从字面上看,这还真是差不多.但在Act ...

  7. 前端--json数据的处理及相关兼容问题

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 JavaScript 原生格式,这意 ...

  8. 【转】ASP.NET MVC教程

    转自:http://www.cnblogs.com/QLeelulu/category/123326.html ASP.NET MVC的最佳实践与性能优化的文章 摘要: 就一些文章链接,就不多废话了. ...

  9. 弹出对话框 UIAlertController

    双选 //实例化UIAlertController var av=UIAlertController(title: "

  10. javaScript常用方法整合(项目中用到过的)

    防止输入空格.缩进等字符: function trim(str){ return str.replace(/^\s+|\s+$/g,""); } JS去掉style样式标签 fun ...