bzoj 2565 最长双回文串 马拉车
来源:互联网 发布:网络架构工程师干什么 编辑:程序博客网 时间:2024/06/05 16:07
Description
顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。
输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。
Input
一行由小写英文字母组成的字符串S。
Output
一行一个整数,表示最长双回文子串的长度。
Sample Input
baacaabbacabb
Sample Output
12
HINT
样例说明
从第二个字符开始的字符串aacaabbacabb可分为aacaa与bbacabb两部分,且两者都是回文串。
对于100%的数据,2≤|S|≤10^5
思路
首先用manacher求出每个点所能扩展的最长回文串,然后对于每个点记录l[i]r[i]代表以当前点结尾或者开头的最长回文串长度…
对于lr的求法有两种…一种是我这种比较low的求法…一种是LTY大佬边做manacher边求lr的做法…
代码
#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N=200000+5;int ans,len,p[N],l[N],r[N];char s[N],str[N];void prework(){ int i; for (i=0;s[i];i++) str[2*i+1]='#',str[(i+1)*2]=s[i]; len=2*i+1;str[0]='$';str[len]=str[len+1]='#';}void manacher(){ int id,mx=0; for (int i=1;i<len;i++) { p[i]=i<mx?min(p[id*2-i],mx-i):1; while(str[i-p[i]]==str[i+p[i]]) p[i]++; if (p[i]+i>mx) mx=p[i]+i,id=i; }}int main(){ scanf("%s",s);ans=0; prework();manacher(); for (int i=1;i<=len;i++) l[i-p[i]+1]=max(l[i-p[i]+1],p[i]-1),r[i+p[i]-1]=max(r[i+p[i]-1],p[i]-1); for (int i=1;i<=len;i++) { if (i&1) l[i]=max(l[i],l[i-1]-2); else l[i]=max(l[i],l[i-1]); } for (int i=1;i<len;i++) if (l[i]&&r[i]) ans=max(ans,l[i]+r[i]); printf("%d\n",ans); return 0;}
阅读全文
2 0
- bzoj 2565 最长双回文串 马拉车
- 最长回文子串-----“马拉车”算法
- 最长回文子串(马拉车)
- 最长回文 --马拉车算法
- hihoCoder 最长回文子串(manacher算法:马拉车)
- hihoCoder-1032 - 最长回文子串(Manacher 马拉车)
- Manacher马拉车算法求最长回文子串
- mannachar(马拉车)求最长回文子串
- 最长回文字串(马拉车算法)
- 最长回文字符串(马拉车算法)
- BZOJ 2565 最长双回文串 Manacher
- [bzoj 2565] 最长双回文串
- BZOJ 2565 最长双回文串(manacher)
- BZOJ 2565: 最长双回文串
- BZOJ 2565 最长双回文串
- BZOJ 2565 最长双回文串
- bzoj 2565: 最长双回文串 manacher
- BZOJ 2565 最长双回文串 Manacher
- 阿里巴巴2016前端工程师笔试题1总结
- C语言关键字 union基本知识
- TensorFlow(二)实现Softmax Regression 识别手写数字
- 506
- bootstrap登陆页面设计
- bzoj 2565 最长双回文串 马拉车
- 日志同步与时间同步
- SpringMVC4.3+ hibernate5 整合EhCache 二级缓存 给予java-config
- 发现一个很好的博客,连接是博客中一篇写三种梯度下降发的文章,收藏
- HSV与RGB
- 数据结构实验之链表八:Farey序列
- main :处理命令行选项
- c#使用WPD读取便携式设备信息一(枚举设备、连接设备及读取设备信息)
- sql server学习总结一