#1589 : 回文子串的数量
时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个字符串S,请统计S的所有|S| * (|S| + 1) / 2个子串中(首尾位置不同就算作不同的子串),有多少个是回文字符串?

输入

一个只包含小写字母的字符串S。

对于30%的数据,S长度不超过100。

对于60%的数据,S长度不超过1000。

对于100%的数据,S长度不超过800000。

输出

回文子串的数量

样例输入
abbab
样例输出
          8

manacher算法,可以直接求出
i 枚举中心位置,p[i] 记录i下标为中心的最长回文串半径,
id记录已匹配的回文串中点下标,mx记录已匹配的回文串的右边界下标+1

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define MOD 1000000007
#define MX 800050 int len;
char temp[MX];
char str[MX*];
int p[MX*];
LL ans; void Init()
{
len = , ans = ;
str[len++]='!';
str[len++]='#';
int t = strlen(temp);
for (int i=;i<t;i++)
{
str[len++]=temp[i];
str[len++]='#';
}
memset(p,,sizeof(p));
} void Manacher()
{
int mx = , id =;
for (int i=;i<len;i++)
{
p[i] = mx>i ? min(p[*id-i],mx-i):;
while (i-p[i]>= && str[i+p[i]]==str[i-p[i]]) p[i]++;
ans+=p[i]/;
if (i+p[i]>mx)
{
mx = i+p[i];
id = i;
}
}
} int main()
{
while (scanf("%s",temp)!=EOF)
{
Init();
Manacher();
printf("%lld\n",ans);
}
return ;
}

 

最新文章

  1. solr.net的使用
  2. vert.x学习(八),用JDBCClient配合c3p0操作数据库
  3. 介绍开源的.net通信框架NetworkComms框架 源码分析(二十一 )TCPConnectionListener
  4. jquery_easyui 相关问题
  5. UVa 111 - History Grading (by 最长公共子序列 )
  6. 使用ASP.Net WebAPI构建REST服务(三)——返回值
  7. 记录下mybatis中#{}和${}传参的区别
  8. Redis中各种方法的使用
  9. Sequence Classification
  10. Python用类实现串以及对串的方法进行单元测试
  11. ACM_并查集
  12. 备忘:MySQL中修改表中某列的数据类型、删除外键约束
  13. 使用docker试用各种软件及docker-ES设置
  14. ID3算法下的决策树
  15. Delphi Excel导入 的通用程序转载
  16. Jquery 组 checkbox双向控制与tr变色
  17. 6-16 单词 uva10129
  18. 分割回文串 II &#183; Palindrome Partitioning II
  19. phpexcel 导入导出excel表格
  20. python基础(8)--迭代器、生成器、装饰器

热门文章

  1. C语言--矩阵置换
  2. linux 配置apache、mysql、php ——20150807
  3. WP8数据存储--独立存储设置
  4. U盘安装
  5. 应用phpexcel导出excel文件后打不开的问题解决方法
  6. web.py学习遇到的问题
  7. Sring容器的懒加载lazy-init设置
  8. Verilog HDL test bench 문법에 관한
  9. __attribute__系列之介绍篇
  10. 360 网络攻防 hackgame 解题报告(通关)