【BZOJ2565】最长双回文串(回文树)

题面

BZOJ

题解

枚举断点\(i\)
显然的,我们要求的就是以\(i\)结尾的最长回文后缀的长度
再加上以\(i+1\)开头的最长回文前缀的长度
至于最长回文前缀怎么求?
把串反过来前缀不就变成后缀了吗?
所以构造两个回文树就好啦

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define RG register
#define MAX 120000
inline int read()
{RG int x=0,t=1;RG char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=-1,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return x*t;
}
int n,len1[MAX],len2[MAX],ans;
char s[MAX];
struct Palindromic_Tree
{struct Node{int son[26];int ff,len;}t[MAX];int last,tot;void init(){t[0].ff=t[1].ff=1;t[tot=1].len=-1;}void extend(int c,int n,char *s){int p=last;while(s[n-t[p].len-1]!=s[n])p=t[p].ff;if(!t[p].son[c]){int v=++tot,k=t[p].ff;t[v].len=t[p].len+2;while(s[n-t[k].len-1]!=s[n])k=t[k].ff;t[v].ff=t[k].son[c];t[p].son[c]=v;}last=t[p].son[c];}
}t1,t2;
int main()
{t1.init();t2.init();scanf("%s",s+1);n=strlen(s+1);for(int i=1;i<=n;++i)t1.extend(s[i]-97,i,s),len1[i]=t1.t[t1.last].len;reverse(&s[1],&s[n+1]);for(int i=1;i<=n;++i)t2.extend(s[i]-97,i,s),len2[n-i+1]=t2.t[t2.last].len;for(int i=1;i<n;++i)ans=max(ans,len1[i]+len2[i+1]);printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/8460183.html

【BZOJ2565】最长双回文串(回文树)相关推荐

  1. BZOJ2565 最长双回文子串 回文自动机,回文树

    bzoj2565: 最长双回文串 题意 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba" ...

  2. HYSBZ - 2565 最长双回文串(回文自动机)

    题目链接:点击查看 题目大意:给出一个字符串 s ,求最长双回文子串,题目规定最长双回文子串 t 可以拆成左右两部分,满足两部分都是回文串 题目分析:一开始读错题了,以为是双回文串本身也需要是回文串, ...

  3. HYSBZ 2565 最长双回文串 (回文树)

    2565: 最长双回文串 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1377  Solved: 714 [Submit][Status][Dis ...

  4. 洛谷P4555 [国家集训队]最长双回文串(manacher 线段树)

    题意 题目链接 Sol 我的做法比较naive..首先manacher预处理出以每个位置为中心的回文串的长度.然后枚举一个中间位置,现在要考虑的就是能覆盖到i - 1的回文串中 中心最靠左的,和能覆盖 ...

  5. 论如何优雅的处理回文串 - 回文自动机详解

    写在前面 最近无意中看到了这个数据结构,顺便也就学习了一下. 而且发现网上关于这个算法的描述有很多地方是错的,在这里做了一些更正. 处理字符串的算法很多: KMP,E-KMP,AC自动机,后缀三兄弟: ...

  6. HYSBZ - 3676 回文串(回文自动机)

    题目链接:点击查看 题目大意:求出回文子串中 出现次数*长度 的最大值 题目分析:回文自动机直接搞维护最大值就是答案了 代码: #include<iostream> #include< ...

  7. 回文算法java实现_java算法题:最长回文串

    LeetCode: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串.在构造过程中,请注意区分大小写.比如"Aa"不能当做一个回文字符串.注 意:假设字 ...

  8. 判断回文串,最长回文串方法

    1.判断回文串 回文串就是从左看与从右看都是一样的字符串,例如abcba,acddca 判断一个字符串是否为回文串:如判断s=abcdcba是否为回文串,只要看s以中间位分界线,s的左右两边是否相等即 ...

  9. SDUT F - 判断回文串

    F - 判断回文串 用线段树去维护字符串前缀哈希,基础的字符串哈希是在一整段哈希中截取一部分哈希,但线段树的维护恰好将其反转过来,是维护区间哈希,通过一种 与字符串哈希获取某一段哈希 相反的方法将其维 ...

最新文章

  1. 图解YARN--大数据平台技术栈17
  2. 内容分析在用户反馈分析中的应用
  3. pandas教程:pandas主要功能详解
  4. Thread如何中断
  5. 使用外部同步的 Boost.Test 调用在 MT 环境中测试单元测试框架的可用性
  6. 运用贪心思想解决跳跃游戏
  7. 最新TurboMail邮件服务器Linux_安腾版本上市
  8. 《C++之那些年踩过的坑(附录一)》
  9. “命令终端”的实现2-字符读取及按键控制
  10. 机器学习2/100天-简单线性回归
  11. 如何提高思考能力,(一个绝对能帮到你的科普)取自《思维混乱:是因为大脑没有结构》谢春霖
  12. php 数字转人民币,php数字转人民币金额大写
  13. excel加密的两种实现方式
  14. 罗格斯的计算机科学博士奖学金,罗格斯大学计算机科学系
  15. 淘宝直播全屏页重排算法实践
  16. Python pywifi ERROR Open handle failed 的问题
  17. Python编程之md5加密和sha1加密
  18. 计算机的发明还不到一百年 英语,考研英语作文万能句子25个.doc
  19. 【动网论坛7.1 sp1 修改】-加强检查注册昵称,防止全数字及简单重复ID注册
  20. 丘成桐:人类生活在十维宇宙里

热门文章

  1. SSM之Mybatis框架
  2. linux 下strstr函数,Linux中strchr与strstr函数实现。
  3. 神经网络测试集loss不变_神经网络训练过程中不收敛或者训练失败的原因
  4. case when then else_SQL 优化大神玩转 MySQL函数系列_case_when 的坑
  5. [leetcode周赛] 1349. 参加考试的最大学生数
  6. 数据库实验5 数据库的嵌套查询实验
  7. OpenGL基础3:渲染管线
  8. 51nod-1422:沙拉酱前缀
  9. linux下查看内存频率,内核函数,cpu频率
  10. Go语言学习之11 日志收集系统kafka库实战