BZOJ2565: 最长双回文串(回文树)

知识点:1.前后扫描两次字符串,分别建回文树。

#include <bits/stdc++.h>
using namespace std;
const long long MAXN = 100002;
struct PAM
{char c[MAXN];long long ch[MAXN][26];long long fail[MAXN],len[MAXN],cnt[MAXN];long long tot,last;long long newnode(long long lg){len[++tot] = lg;return tot;}void init(){tot = -1;newnode(0);newnode(-1);fail[0] = 1;c[0] = '~';last = 0;}long long getfail(long long x,long long mid){while(c[x - len[mid] - 1] != c[x])mid = fail[mid];return mid;}long long insert(long long t){long long x = getfail(t,last);long long u = c[t] - 'a';if(!ch[x][u]){long long y = newnode(len[x] + 2);fail[y] = ch[getfail(t,fail[x])][u];ch[x][u] = y;} cnt[last = ch[x][u]]++;return len[ch[x][u]];}
}a1,a2;
long long maxn[MAXN + 2];
int main()
{scanf("%s",a1.c + 1);a1.init();a2.init();long long l = strlen(a1.c + 1);for(long long i = 1;i <= l;i++)a2.c[l - i + 1] = a1.c[i];for(long long i = 1;i <= l;i++){maxn[i] = a1.insert(i); }   long long ans = -1;for(long long i = 1;i <= l - 1;i++)//Wrong 1 : 一开始写成了for(int i = 1;i <= l;i++),应该是l - 1而不是l,因为最头分界点只能是第二个点。
    {long long t = a2.insert(i);ans = max(ans,t + maxn[l - i]);}printf("%lld",ans);return 0;
}  

转载于:https://www.cnblogs.com/xyj1/p/10663181.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 - 判断回文串 用线段树去维护字符串前缀哈希,基础的字符串哈希是在一整段哈希中截取一部分哈希,但线段树的维护恰好将其反转过来,是维护区间哈希,通过一种 与字符串哈希获取某一段哈希 相反的方法将其维 ...

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

    [BZOJ2565]最长双回文串(回文树) 题面 BZOJ 题解 枚举断点\(i\) 显然的,我们要求的就是以\(i\)结尾的最长回文后缀的长度 再加上以\(i+1\)开头的最长回文前缀的长度 至于最 ...

最新文章

  1. 【转】Java字符串与字符集的基本概念
  2. MySQL实验作业_MySQL作业
  3. Tom Ryaboi
  4. CocoaPods版本升级
  5. Shell 显示带颜色字体
  6. Oracle Net Configuration(监听程序和网络服务配置)
  7. CSS中的position定位
  8. python3 ftp模块_python3利用pyftpdlib模块启动ftp服务
  9. 枚举类型的用法 很不错的定义不同类型的工具
  10. swagger openapi开放平台 pyhton3.7实现http发送请求,pyhon中代码中发送http请求控制4g物联网开关
  11. HTML的文本可以删除吗,如果内部包含一些文本,请删除html标记
  12. VLAN的分类与实验
  13. acs880变频器选型手册_设备安装:变频器调试成功就差这一步了
  14. 创新创业基础答案李家华金利杰
  15. sony android 计算器,NeoCal 全能计算器 V2.0.2
  16. DO-218AB封装,SM8T系列,SM8S系列加强版,汽车级TVS二极管
  17. 百度AI 开放平台API调用
  18. hive hive beeline常用参数
  19. java-php-python-springboot志愿者服务平台计算机毕业设计
  20. 图解图库JanusGraph系列-一文知晓“图数据“底层存储结构(JanusGraph data model)

热门文章

  1. Eclipse tooltip变黑的修正
  2. tcp 重发 应用层重传
  3. 深度学习之江湖~那些大神们
  4. 64位sql server 如何使用链接服务器连接Access
  5. [SAP ABAP开发技术总结]动态修改选择屏幕
  6. 无Xaml的WPF展示
  7. SQLite(3) Windows安装小结
  8. Spring之IOC容器
  9. 括号匹配算法Java实现
  10. android mvvm点击事件,c# – MVVMCross:如何将Xamarin.Android事件绑定到ViewModel命令