题意:找到一个最长回文子串,该子串能够分成两长度大于0的部分,每部分都是一个回文串

题解:回文树维护一个以i为起点和终点的最长回文串长度数组即可

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e5+5;
const int N = 27;
struct Palindromic_Tree {int next[MAXN][N] ;//next指针,next指针和字典树类似,指向的串为当前串两端加上同一个字符构成int fail[MAXN] ;//fail指针,失配后跳转到fail指针指向的节点int cnt[MAXN] ; //表示节点i表示的本质不同的串的个数(建树时求出的不是完全的,最后count()函数跑一遍以后才是正确的)int num[MAXN] ; //表示以节点i表示的最长回文串的最右端点为回文串结尾的回文串个数。int len[MAXN] ;//len[i]表示节点i表示的回文串的长度int S[MAXN] ;//存放添加的字符int last ;//指向上一个字符所在的节点,方便下一次addint n ;//字符数组指针int p ;//节点指针int newnode ( int l ) {//新建节点for ( int i = 0 ; i < N ; ++ i ) next[p][i] = 0 ;cnt[p] = 0 ;num[p] = 0 ;len[p] = l ;return p ++ ;}void init () {//初始化p = 0 ;newnode (  0 ) ;newnode ( -1 ) ;last = 0 ;n = 0 ;S[n] = -1 ;//开头放一个字符集中没有的字符,减少特判fail[0] = 1 ;}int get_fail ( int x ) {//和KMP一样,失配后找一个尽量最长的while ( S[n - len[x] - 1] != S[n] ) x = fail[x] ;return x ;}int add ( int c ) {c -= 'a' ;S[++ n] = c ;int cur = get_fail ( last ) ;//通过上一个回文串找这个回文串的匹配位置if ( !next[cur][c] ) {//如果这个回文串没有出现过,说明出现了一个新的本质不同的回文串int now = newnode ( len[cur] + 2 ) ;//新建节点fail[now] = next[get_fail ( fail[cur] )][c] ;//和AC自动机一样建立fail指针,以便失配后跳转next[cur][c] = now ;num[now] = num[fail[now]] + 1 ;}last = next[cur][c] ;cnt[last] ++ ;return len[last];}ll count () {ll ans = 0;//父亲累加儿子的cnt,因为如果fail[v]=u,则u一定是v的子回文串!for(int i = p-1; i >= 0; i--){cnt[fail[i]] += cnt[i] ;ans = max(ans,(ll)cnt[i]*len[i]);}return ans;}
} pat;char s1[MAXN];
int x1[MAXN],x2[MAXN];
int main(){while(~scanf("%s",s1)){int len = strlen(s1);for(int i = 0; i <= len; i++) x1[i] = 0,x2[i] = 0;pat.init();for(int i = 0; i < len; i++){x1[i] = pat.add(s1[i]);  //x1表示以i为结尾的最大回文串长度}pat.init();for(int i = len-1; i >= 0; i--)x2[i] = pat.add(s1[i]);  //x2表示以i为起始的最大回文串长度int ans = 0;for(int i = 0; i < len; i++){//printf("%d %d\n",x1[i],x2[i]);if(x1[i] == 0 || x2[i+1] == 0) continue;ans = max(ans,x1[i]+x2[i+1]);}printf("%lld\n",ans);}}

HYSBZ 2565 最长双回文串相关推荐

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

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

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

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

  3. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  4. BZOJ 2565: 最长双回文串

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

  5. 2565: 最长双回文串

    Description 顺序和逆序读起来完全一样的串叫做回文串.比如acbca是回文串,而abc不是(abc的顺序为"abc",逆序为"cba",不相同). 输 ...

  6. BZOJ 2565 最长双回文串 Manacher

    题目大意: 定义双回文串G是指一个可以被拆分成两个部分(S和T)的字符串G = S + T, 且S和T都是回文串的串, G自己本身可以不是回文串 给出一个长度为n ( 2 <= n <= ...

  7. BZOJ 2565 最长双回文串

    回文树 正着反着做一遍回文树即可.然而好久没写回文树了,调了好一会儿.大概把一些细节讲一下. 需要建两个根root1(len = -1)和root2(len = 0),其中root1的pre是自己,r ...

  8. [国家集训队]最长双回文串 manacher

    ---题面--- 题解: 首先有一个直观的想法,如果我们可以求出对于位置i的最长后缀回文串和最长前缀回文串,那么我们枚举分界点然后合并前缀和后缀不就可以得到答案了么? 所以我们的目标就是求出这两个数列 ...

  9. 青橙 A1280. 最长双回文串

    A1280. 最长双回文串 时间限制:2.0s   内存限制:512.0MB   总提交次数:   AC次数:   平均分: 将本题分享到: 查看未格式化的试题   提交   试题讨论 试题来源 中国 ...

最新文章

  1. simple c语言,C语言——指针(simple).ppt
  2. ORACLE JOB 失败 查看,Oracle JOB异常中断原因分析
  3. oracle hang analyze,hanganalyze 分析数据库挂起
  4. 最大化最小值 | | 最小化最大值
  5. licode学习之erizo篇--Pipeline_service
  6. esp8266 继电器接线图_esp8266控制继电器问题(通电瞬间继电器吸合断开一次)
  7. linux下docker部署redis
  8. 如何选择梯度下降法中的学习速率α(Gradient Descent Learning Rate Alpha)
  9. Unicode 字符编码
  10. Faster R-CNN理论
  11. 外文文献怎么找?5个免费图书馆和网站帮你下载90%的外文文献!
  12. Java 基础高频面试题(2022年最新版)
  13. js中Math.random()生成指定范围数值的随机数
  14. 处理器访问内存时,CPU核、cache、MMU如何协同工作
  15. kaggle-2美国人口普查年收入50K分类
  16. PowerBI系列之什么是PowerBI
  17. 服务器配置的各种英文简称
  18. 项目时间(概念、活动定义、活动排序)(笔记)
  19. C++——NOIP模拟题——葫芦
  20. R语言统计与绘图:生存曲线的两两比较

热门文章

  1. go-cms golang内容管理系统, vue分离+自动代码生成
  2. 案例4加减乘除四则运算
  3. 数据分析师未来发展前景如何?
  4. html 气泡上升效果,css气泡效果
  5. 点卯.三维视频融合助力国家全面推进实景三维中国建设, 构建数字中国建设基座 ;开放C++源代码 点卯-魔镜系列
  6. Redis设计与实现详解二:Redis数据库实现
  7. 如何在计算机桌面上增添word,word在电脑桌面的图标不见了怎么办
  8. 思科路由器开启DNS解析
  9. Mysql探索之索引详解,又能和面试官互扯了~,java分布式系统面试题
  10. 随笔,总结2020年AI在制造业领域的磕磕碰碰