#1589 : 回文子串的数量(Manacher)
描述
给定一个字符串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 ;
} 
#1589 : 回文子串的数量(Manacher)的更多相关文章
- Hihocoder #1602 : 本质不同的回文子串的数量 manacher + BKDRhash
		
#1602 : 本质不同的回文子串的数量 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个字符串S,请统计S的所有子串中,有多少个本质不同的回文字符串? 注意如果 ...
 - 【HIHOCODER 1589】回文子串的数量(Manacher)
		
描述 给定一个字符串S,请统计S的所有|S| * (|S| + 1) / 2个子串中(首尾位置不同就算作不同的子串),有多少个是回文字符串? 输入 一个只包含小写字母的字符串S. 对于30%的数据,S ...
 - 1089 最长回文子串 V2(Manacher算法)
		
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa ...
 - 51Nod 1089:最长回文子串 V2(Manacher算法)
		
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 回文串是指aba.abba.cccbccc.aaa ...
 - hiho1602本质不同的回文子串的数量
		
给定一个字符串S,请统计S的所有子串中,有多少个本质不同的回文字符串? 注意如果两个位置不同的子串满足长度相同且对应字符也都相同,则认为这两个子串本质上是相同的. Input 一个只包含小写字母的字符 ...
 - 51NOD 1088 最长回文子串&1089 最长回文子串 V2(Manacher算法)
		
回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. Input 输入Str(Str的长度 <= 1000(第二题要 ...
 - [51Nod1089] 最长回文子串 V2(Manacher算法)
		
1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 回文串是指aba.abba.cccbccc.aaaa这种左右对称 ...
 - hdu5371 最长回文子串变形(Manacher算法)
		
pid=5371">http://acm.hdu.edu.cn/showproblem.php? pid=5371 Problem Description Hotaru Ichijou ...
 - 最长回文子串问题-Manacher算法
		
转:http://blog.csdn.net/dyx404514/article/details/42061017 Manacher算法 算法总结第三弹 manacher算法,前面讲了两个字符串相算法 ...
 
随机推荐
- 1364:Field 'sex' doesn't have a default value [ SQL语句 ]
			
1364:Field 'sex' doesn't have a default value [ SQL语句 ] 错误解决方法: 关闭MySQL的strict mode的具体做法: 找到MySQL目 ...
 - ajax 底层源码解析
			
对象: XMLHttpRequest 属性:readyState请求状态,开始请求时值为0直到请求完成这个值增长到4 responseText目前为止接收到的响应体,readyState<3此属 ...
 - 【DB2】NICKNAME报错:SQL0206N  "A0.CST_NM" 在使用它的上下文中无效。  SQLSTATE=42703
			
1.环境展示: 2.操作描述 现在修改数据库A中CUST_INFO物理表的表结构,新增一个字段为desc varchar(100) ALTER TABLE CUST_INFO DROP COLUMN ...
 - 51单片机 | SPI协议与应用实例
			
———————————————————————————————————————————— SPI总线 - - - - - - - - - - - - - - - - - - - - - - - - - ...
 - Centos6.8 下 Node.js 的安装
			
思路:采用编译好的文件进行安装 一 使用 wget 下载 到 Node.js 官网(https://nodejs.org/en/download/) 选择要下载的编译版本(Source Code) / ...
 - js知识地图--js大脑图beta01版正式发布
			
原文地址 http://zhangyaochun.iteye.com/blog/1682605 原作者:zhangyaochun
 - Java获取网卡的mac地址
			
为了项目的安全,有时候需要得到电脑的唯一码,比如:网卡的mac地址.和大家分享一下,下面是项目中用到的工具类: import java.io.BufferedReader;import java.io ...
 - Mat::operator =
			
Provides matrix assignment operators. C++: Mat& Mat::operator=(const Mat& m) C++: Mat& M ...
 - PHP输出xls文件
			
PHP输出xls文件 标签: phpexcelxmlcsvborderheader 2008-11-17 09:33 2611人阅读 评论(0) 收藏 举报 分类: WebDev(9) 版权声明: ...
 - C#中基本类型占用字节数
			
bool -> System.Boolean (布尔型,其值为 true 或者 false) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ...