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. [转] Tomcat 配置 SSL

    PS: keystore有自己的访问密码,这个保护层次要低一些,然后keystore里面存有自己的私钥,所以用户要破解的话,既要有keystore,又要有keystore的密码,p12是客户端keys ...

  2. java io 文件操作

    package com.svse; import java.io.File; import java.io.IOException; public class IOTest { public stat ...

  3. oracle学习笔记4:PL/SQL

    PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下: [declare] --声明部分,可选 begin --执行部分,必须 [exception] --异常处理部分,可选 e ...

  4. Objective-C中的@dynamic(转)

    转自 http://blog.csdn.net/haishu_zheng/article/details/12873151 Objective-C中的@dynamic 一.@dynamic与@synt ...

  5. 【html】【3】html标签列表

    必看参考: http://www.divcss5.com/html/h323.shtml http://www.w3school.com.cn/tags/tag_html.asp 常用: <ht ...

  6. 24种设计模式--命令模式【Command Pattern】

    今天讲命令模式,这个模式从名字上看就很简单,命令嘛,老大发命令,小兵执行就是了,确实是这个意思,但是更深化了,用模式来描述真实世界的命令情况.正在看这本书的你,我猜测分为两类:已经工作的和没有工作的, ...

  7. 可编辑tab选项卡

    效果如图所示,基于jq开发的,用原生可能会麻烦点.所以我没写. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//E ...

  8. c++相关知识回顾

    1.typedef typedef用来定义同类型的同义词.如: typedef unsingned int size_t; typedef int ptrdiff_t; typedef T * ite ...

  9. ubuntu 14.04 修改PS1提示符

    默认情况下,Ubuntu终端会输出完整路径,在路径名很长的时候,提示方式很不友好,通过以下步骤修改PS1变量的设置,可以让终端输出相对路径.类似于红帽系统的风格.修改思路:将w修改为W显示绝对路径,并 ...

  10. Webstorm6的汉化以及主题设置

    Webstorm6.0.2界面截图: webstorm作为一款前端开发软件,被业内称为神器,下面是下载地址. 需要的人太多,邮件不过来,传到这边方便大家下载 汉化包 http://www.jetbra ...