Problem : 3068 ( 最长回文 ) Judge Status : Accepted
RunId : 6255711 Language : C++ Author : ssun
Code Render Status : Rendered By HDOJ C++ Code Render Version 0.01 Beta
#include "stdio.h"
#include "string.h"
#define N 2200050
char str[N],nstr[2*N];
int rad[2*N];
int len,nlen;
int manacher(){
int id, i, ans = 1;
int mx = 0;
// printf("%d",strlen(nstr));
for(i=1; i<nlen; i++){//$#1#2#3#3#2#1#不要用strlen(nstr)代替nlen
if(mx > i)
rad[i] = mx - i < rad[2*id-i] ? mx - i : rad[2*id-i];
else
rad[i] = 1;
for(;nstr[i+rad[i]] == nstr[i-rad[i]];rad[i]++)
;
if(rad[i] + i > mx){
mx = rad[i] + i;
id = i;
}
ans = rad[i] > ans ? rad[i] : ans;
}
return ans-1;
}
int main(){
while(scanf("%s",str)!=EOF){
int i=0;
// memset(rad,0,sizeof(rad));
nstr[0] = '$';
nstr[1] = '#';
len = strlen(str);
for(i=0; i<len; i++){
nstr[2*i+3] = '#';
nstr[2*i+2] = str[i];
}
nstr[2*i+2] = 0;
nlen = 2 * len + 2;
printf("%d\n",manacher());
}
return 0;
}
参考http://bbs.dlut.edu.cn/bbstcon.php?board=Competition&gid=23474对Manacher算法的解释
其实值得一提的是这个程序的manacher()函数里面的for循环不要用strlen()函数,不然的话会超时,不用strlen函数而用nlen = 2 * len + 2的话250ms可以过
分享到:
相关推荐
- HDU3068最长回文使用了扩展的KMP算法。KMP算法是一种用于字符串匹配的高效算法,而扩展KMP则可以用来处理回文子串的问题。 - Timus 1297最长回文子串后缀数组解法:通过后缀数组和Manacher's Algorithm,可以...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
9. **动态规划**:这是一种优化策略,通过构建状态转移方程来求解问题,例如背包问题、最长公共子序列、矩阵链乘法等。 10. **回溯法**:在解决组合优化问题和逻辑推理问题时常用,如八皇后问题、数独求解等。 11....
HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...
1025 经典 DP,最长递增子序列(要用 NLogN 的方法过);1051 经典贪心,也可以用 DP;1058 经典问题,丑数,DP;1081 经典 DP 等等。 搜索题 搜索题是 ACM HDU 题目分类中的一大类,例如,1010 搜索题,剪枝很...
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
常见的DP题目类型包括但不限于最长公共子序列、背包问题、最短路径、区间调度等。 在动态规划中,我们通常遵循以下步骤: 1. **定义状态**:确定问题的状态,通常是问题的关键属性的组合。 2. **状态转移方程**:找...
### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...
2. **动态规划**:解决许多具有重叠子问题和最优子结构的问题,如背包问题、最长公共子序列等。 3. **贪心算法**:在每一步选择局部最优解,以期达到全局最优,如活动安排问题、霍夫曼编码等。 4. **数据结构**:...
HDU1059的代码
题目名为“hdu 1257 最低拦截系统”,这里的“最低拦截系统”实际上是描述了一个问题场景,而具体的问题通过描述部分可以得知是要求找出给定数组中的最长递增子序列的长度。这里所谓的“最低拦截系统”可能是为了...
hdu1001解题报告
hdu 1574 passed sorce
根据提供的信息,我们可以总结出以下关于“hdu动态规划算法集锦”的知识点: ### 动态规划基础概念 动态规划是一种解决多阶段决策问题的方法,它通过将原问题分解为互相重叠的子问题,利用子问题的解来构建原问题...
【标题】"HDU.rar_hdu_hdu07_com_shownv9b_www.563hdu." 暗示这是一个与HDU(杭州电子科技大学在线编程平台)相关的压缩包,其中可能包含了该平台上的编程竞赛题目或练习题目的源代码。"hdu07"可能是某个特定题目的...
【标题】:杭电ACMhdu1163 【描述】:这是一道源自杭州电子科技大学(Hangzhou Dianzi University,简称HDU)的ACM编程竞赛题目,编号为1163。这类问题通常需要参赛者利用计算机编程解决数学、逻辑或算法上的挑战,...
hdu2101AC代码
HDU是杭州电子科技大学(Hangzhou Dianzi University)举办的一个在线编程竞赛平台,全称为HDU Online Judge。ACM是国际大学生程序设计竞赛(International Collegiate Programming Contest)的缩写,是一个全球性的...
【标题】"hdu_acm_1084.rar_ACM_HDU10_acm10_hdu_hdu 1084" 提供的是一个关于杭电(HDU)ACM竞赛第1084题的解决方案。该题目可能是在编程竞赛中常见的算法问题,而ACM(国际大学生程序设计竞赛)是全球知名的编程...
【ACM入门与提高:HDU ACM竞赛课程详解】 ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest,简称ICPC或ACM/ICPC)是一项全球性的竞赛,旨在激发大学生对计算机科学的兴趣,提升他们的...