洛谷题目传送门

写完有一段时间了,发现板子忘记存在了这里。。。。。。

算法简述

一种字符串算法,\(O(n)\)高效求出以每个字符为对称中心的最长回文串长度。

然后,就可以进一步求出全串中最长回文串的长度,以及全串回文子串总数。

这篇博客已经讲的很清楚了。

有一个小细节还需要提一下。为了方便判断下标是否越界问题,我们可以这样做——将字符串从一号下标开始存储,然后在零号下标放一个与串中所有字符都不同的字符(包括中间插入的字符)。这样在扫到边界的时候,一定会匹配失败。这样少写了好几个if,非常方便。

其它就没什么问题了。模板如下:

#include<cstdio>
char s[23333333];
int f[23333333];
inline int min(register int x,register int y){return x<y?x:y;}
int main()
{
register int len,i,l,r,mr=0,m=0,ans=0;
s[0]='~';s[1]='%';//上面提到的小细节
for(len=2;(s[len]=getchar())>='a';len+=2)
s[len|1]='%';
for(i=1;i<len;++i)
{
if(i<mr)f[i]=min(f[(m<<1)-i],mr-i);//最大化利用前面的信息
for(l=i-f[i]-1,r=i+f[i]+1;s[l]==s[r];--l,++r,++f[i]);//继续向两侧匹配
if(mr<r-1)mr=r-1,m=i;//更新最大可行右端点
if(ans<f[i])ans=f[i];//更新最大长度
}
printf("%d\n",ans);
return 0;
}

另外,向中间插入使得字符串长度增加了一倍。我在洛谷rank榜第一名的代码中看到,这位神犇居然没插字符!时间也基本比我少一半。

我还是懒得整理啦(其实是因为我太菜了)。可能会对奇数长度回文子串和偶数长度回文字串进行分别处理吧。有兴趣的博友们可以自己研究一下哦!

manacher模板(manacher)的更多相关文章

  1. ural 1297 Palindrome(Manacher模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 求最长回文子串. http://acm.timus.ru/problem.aspx ...

  2. HDU 3068 最长回文(manacher模板题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目大意:求字符串s中最长的回文子串 解题思路:manacher模板 代码 #include&l ...

  3. HDU 3068 最长回文( Manacher模板题 )

    链接:传送门 思路:Manacher模板题,寻找串中的最长回文子串 /***************************************************************** ...

  4. HDU3068:最长回文(Manacher模板)

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 洛谷P3805 [模板]Manacher算法 [manacher]

    题目传送门 题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符 ...

  6. Manacher模板( 线性求最长回文子串 )

    模板 #include<stdio.h> #include<string.h> #include<algorithm> #include<map> us ...

  7. Palindrome - POJ 3974 (最长回文子串,Manacher模板)

    题意:就是求一个串的最长回文子串....输出长度. 直接上代码吧,没什么好分析的了.   代码如下: ================================================= ...

  8. manacher 模板

    求最长回文子序列的 O(n)做法 讲解 #include <iostream> #include <cstdio> #include <algorithm> #in ...

  9. 模板 manacher算法

    题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格 ...

  10. 最长回文(manacher模板)

    #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> us ...

随机推荐

  1. python爬虫(2)——编写一个爬虫

    一.URL的编码与解码 在python2中包含的urllib和urllib2,都是接受URL请求相关的模块.但是在python3中,却没有urllib2.实际上urllib2的功能在python3中可 ...

  2. tcp_sync_server and tcp_sync_client

    #include <iostream> #include <fstream> #include <sstream> #include <boost/asio. ...

  3. 高可用Redis服务架构分析与搭建

    基于内存的Redis应该是目前各种web开发业务中最为常用的key-value数据库了,我们经常在业务中用其存储用户登陆态(Session存储),加速一些热数据的查询(相比较mysql而言,速度有数量 ...

  4. JSP的几种跳转方式的异同

    1 <jsp:foward page="url" /> 服务端跳转,立即跳转,后续语句不会执行: 2 <% response.sendRedirect(" ...

  5. 异步任务利器Celery(一)介绍

    django项目开发中遇到过一些问题,发送请求后服务器要进行一系列耗时非常长的操作,用户要等待很久的时间.可不可以立刻对用户返回响应,然后在后台运行那些操作呢? crontab定时任务很难达到这样的要 ...

  6. H-ui.admin v2.3后台模版!

    一个很好的 后台开发模板 演示地址 http://demo.h-ui.net/H-ui.admin/3.1/index.html 下载地址 http://downs.h-ui.net/h-ui/H-u ...

  7. CEF小白人系列1-认识CEF

    手头上有个项目需要做浏览器的相关功能,评估了几个嵌入式方案最后选定CEF作为开发基础. 在入坑新技术的时候第一选择是去官网学习,这是一个非常好的习惯. CEF官网(请科学上网) https://bit ...

  8. css实现多行多列的布局

    1.两列多行: HTML: <div class="box1"> box1:实现两列多行布局 <ul> <li>111</li> & ...

  9. sql必知必会笔记

    1.DISTINCT 用于剔除重复的值, 如果后跟多个列, 则要求所有列的值都相同才会被剔除.    SELECT DISTINCT ven_id, prod_price FROM Products; ...

  10. Date 类 02

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...