HYSBZ 2565 最长双回文串 (回文树)
2016-05-10 13:20
375 查看
2565: 最长双回文串
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1377 Solved: 714
[Submit][Status][Discuss]
Description
顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。
Input
一行由小写英文字母组成的字符串S。Output
一行一个整数,表示最长双回文子串的长度。Sample Input
baacaabbacabbSample Output
12利用回文树统计以i为结尾的最长回文串长度和以i为开始的最长回文串的长度
#include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> #include <math.h> #include <stdio.h> using namespace std; typedef long long int LL; const int maxn=1e5+5; char str[maxn]; struct Tree { int next[maxn][26]; int fail[maxn]; int len[maxn]; int s[maxn]; int last; int p; int n; int new_node(int x) { memset(next[p],0,sizeof(next[p])); len[p]=x; return p++; } void init() { p=0; new_node(0); new_node(-1); last=0;n=0; s[0]=-1; fail[0]=1; } int get_fail(int x) { while(s[n-len[x]-1]!=s ) x=fail[x]; return x; } int add(int x) { x-='a'; s[++n]=x; int cur=get_fail(last); if(!(last=next[cur][x])) { int now=new_node(len[cur]+2); fail[now]=next[get_fail(fail[cur])][x]; next[cur][x]=now; last=now; } return len[last]; } }tree; int s1[maxn]; int s2[maxn]; int main() { while(scanf("%s",str)!=EOF) { int len=strlen(str); tree.init(); memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); for(int i=0;i<len;i++) { s1[i]=tree.add(str[i]); } tree.init(); for(int i=len-1;i>=0;i--) { s2[i]=tree.add(str[i]); } int ans=0; for(int i=0;i<len;i++) { ans=max(ans,s1[i]+s2[i+1]); } printf("%d\n",ans); } return 0; }
相关文章推荐
- 《java入门第一季》之Arrays类前传(排序问题)
- Java之------单机版书店管理系统(设计思想和设计模式系列三)工具包和公共包
- python 建立ssh连接 并登陆mysql
- 如何更换ubuntu源
- 敏捷项目迭代时,项目经理和项目组成员应该注意什么?
- HYSBZ 2565 最长双回文串 (回文树)
- HDU 2067:小兔的棋盘
- spring的PROPAGATION_REQUIRES_NEW事务,下列说法正确的是(D)
- android adt自带eclipse无法设置ndk路径(找不到NDK配置)
- 基于Servlet API 如何实现转向时不再地址栏中显示转向后的地址?
- C. Bear and Colors
- gdb 多线程调试
- iOS 获取汉字的拼音
- Java 实现图片水印之水印图片(SpringMVC + Jsp)
- ClipboardManager剪切板使用详解(SDK_INT>11)
- 关与VMware虚拟机中系统无法启动的问题
- Ubuntu14.04LST系统中安装ROS遇到的问题
- 第九周项目2—我的数组类
- stm32串口无法识别
- 高斯混合模型用到的几个公式