原题链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3676

回文串

Description

考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最大出现值。

Input

输入只有一行,为一个只包含小写字母(a -z)的非空字符串s。

Output

输出一个整数,为逝查回文子串的最大出现值。

Sample Input
【样例输入l】

abacaba

【样例输入2]

www

Sample Output
【样例输出l】

7

【样例输出2]

4

HINT

一个串是回文的,当且仅当它从左到右读和从右到左读完全一样。

在第一个样例中,回文子串有7个:a,b,c,aba,aca,bacab,abacaba,其中:

● a出现4次,其出现值为4:1:1=4

● b出现2次,其出现值为2:1:1=2

● c出现1次,其出现值为l:1:l=l

● aba出现2次,其出现值为2:1:3=6

● aca出现1次,其出现值为1=1:3=3

●bacab出现1次,其出现值为1:1:5=5

● abacaba出现1次,其出现值为1:1:7=7

故最大回文子串出现值为7。

【数据规模与评分】

数据满足1≤字符串长度≤300000。

题解

Manacher+后缀自动机。

然而在回文自动机出来以后就被爆艹了。。。

板子板子,都是板子

代码
#include<bits/stdc++.h>
using namespace std;
const int M=3e5+5;
char ch[M];
int cot[M],son[M][26],len[M],fail[M],odd=1,even=2,tot=2,last,p,l;
void in(){scanf("%s",ch+1);}
bool go(int v,int x,int pos){return ch[pos-len[v]-1]-'a'==x;}
void add(int x,int pos)
{for(;!go(last,x,pos);last=fail[last]);if(son[last][x])last=son[last][x];else{p=last,son[p][x]=++tot,len[tot]=len[p]+2;if(p==odd)fail[tot]=even;else{for(p=fail[p];!go(p,x,pos);p=fail[p]);fail[tot]=son[p][x];}last=tot;}++cot[last];
}
void ac()
{l=strlen(ch+1);len[odd]=-1,fail[odd]=odd,fail[even]=odd,last=odd;for(int i=1;i<=l;++i)add(ch[i]-'a',i);long long ans=0;for(int i=tot;i;--i)cot[fail[i]]+=cot[i],ans=max(ans,1ll*cot[i]*len[i]);printf("%lld",ans);
}
int main(){in();ac();}

BZOJ3676[APIO2014] 回文串相关推荐

  1. [BZOJ3676][Apio2014]回文串

    [BZOJ3676][Apio2014]回文串 试题描述 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的"出现值"为t在s中的出现次数乘以t的长度.请你求出s的所有 ...

  2. 【回文自动机】bzoj3676 [Apio2014]回文串

    回文自动机讲解!http://blog.csdn.net/u013368721/article/details/42100363 pam上每个点代表本质不同的回文子串.len(i)代表长度,cnt(i ...

  3. [bzoj3676] [APIO2014]回文串

    Description 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的"出 现值"为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最 大出现值. In ...

  4. 2018.12.15 bzoj3676: [Apio2014]回文串(后缀自动机)

    传送门 对原串建立一个后缀自动机,然后用反串在上面匹配. 如果当前匹配的区间[l,r][l,r][l,r]包裹了当前状态的endposendposendpos中的最大值,那么[l,maxpos][l, ...

  5. 【BZOJ3676】 [Apio2014]回文串(SAM,manacher)

    传送门 BZOJ 洛谷 Solution 考虑我们每找到一个回文串就更新一次答案,跑个SAM,这样子复杂度是爆炸的. 接下来的就是优化: 我们可以倍增跳直到跳不了,最后的siz就是出现次数. 没了?没 ...

  6. 回文串问题的克星——Palindrome Tree(回文树)/Palindrome Automaton(回文自动机)学习小记

    前言 最近B组有一道我不会的题,赶紧学习. 简介 我们知道,Manacher算法可以在 O(n) O ( n ) O(n)的时间内求出以每个位置为中心的最长回文串(虽然我昨天还不知道Manacher算 ...

  7. 伍六七带你学算法 入门篇-最长回文串

    力扣解题,每日一题:409. 最长回文串 难度- 简单 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" ...

  8. LeetCode简单题之最长回文串

    题目 给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的 最长的回文串 . 在构造过程中,请注意 区分大小写 .比如 "Aa" 不能当做一个回文字符串. 示例 ...

  9. usaco Calf Flac(O(n)时间求回文串长度)

    好高兴,为数不多的我没看题解的题·,我用的是O(n)时间求回文串长度的算法算法在我上一篇博客. 然后就是注意细节了. /* ID:jinbo wu TASK: calfflac LANG:C++ */ ...

  10. manacher算法----O(n)最长回文串

    manacher算法----O(n)最长回文串 分类:字符串 (126)  (0)  举报  收藏 manacher的时间复杂度为O(n),后缀数组好像可以处理O(nlogn),但是有些变态题目可能卡 ...

最新文章

  1. 2021 - 9 -下旬 数据结构- 线性表 -双端循环队列 - java实现
  2. python源码精要(5)-C代码规范
  3. mysql字段名explain_Mysql中explain用法和结果字段的含义介绍
  4. 图片异步上传,使用ajax上传图片
  5. 查询oracle数据库的表格数据类型,excel表格中如何查询数据库数据类型-我想把excel表格中的数据导入oracle数据库中,想在......
  6. MATLAB路径的正确书写方式
  7. oracle 12c pdb开启和关闭,及设置开机自启动
  8. Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用...
  9. python类方法_Python类方法
  10. 奇门遁甲鸣法 第五章 辅格
  11. P5444 [APIO2019]奇怪装置
  12. adb工具箱_安卓福音,史上最强搞机工具箱,一键修手机
  13. 自学编程的难度如何?
  14. ValueError: operands could not be broadcast together with shapes (416,416,4) (3,)
  15. 消防信号总线原理_消防总线隔离模块作用及工作原理?
  16. 抽象与具体,形而上者谓之道,形而下者谓之器
  17. 密集脚集成块的手工焊接方法
  18. 题都城南庄---中华诗词-唐五代-崔护
  19. 微信web开发工具 移动设备调试
  20. Rails 用 RJS 简单有效的实现页面局部刷新

热门文章

  1. 密码键盘介绍三:数据加解密
  2. android深度探索第二章
  3. 10.11 cocoapods安装
  4. hdu 1520 树形dp入门
  5. performancepoint里面建立数据源的时候,总是发生以下的报警(转的)我也遇到了这个问题...
  6. 微信公众号自定义菜单
  7. java8 stream流操作的flatMap(流的扁平化)
  8. JPA-update方法使用踩坑记
  9. Java中的线程池回顾总结
  10. case结构条件语句