题目描述

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

输入

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

输出

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

样例输入

【样例输入l】
abacaba

【样例输入2]
www

样例输出

【样例输出l】
7

【样例输出2]
4

提示

一个串是回文的,当且仅当它从左到右读和从右到左读完全一样。 
在第一个样例中,回文子串有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。

回文串长度在建回文自动机时就可以求出,主要是求每个回文串的出现次数。我们在建回文自动机时记录每个点的权值表示原串以多少个位置为结尾的最长回文串为这个点所代表的的回文串。那么每个回文串的出现次数就是$fail$指针直接或间接地指向它的点的权值和,也就是$fail$树上这个点的子树权值和,求出$fail$树然后累加一下取最大值即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
char s[300010];
int n,p,q;
int tot;
int fail[300010];
int tr[300010][26];
int last;
int cnt[300010];
int len[300010];
ll ans;
int build(int x)
{
len[++tot]=x;
return tot;
}
int getfail(int x,int n)
{
while(s[n-len[x]-1]!=s[n])
{
x=fail[x];
}
return x;
}
int main()
{
scanf("%s",s+1);
s[0]=-1;
fail[0]=1;
last=0;
len[0]=0;
len[1]=-1;
tot=1;
int size=strlen(s+1);
for(int i=1;i<=size;i++)
{
int x=s[i]-'a';
p=getfail(last,i);
if(!tr[p][x])
{
q=build(len[p]+2);
fail[q]=tr[getfail(fail[p],i)][x];
tr[p][x]=q;
}
cnt[last=tr[p][x]]++;
}
for(int i=tot;i;i--)
{
cnt[fail[i]]+=cnt[i],ans=max(ans,1ll*cnt[i]*len[i]);
}
printf("%lld",ans);
}

BZOJ3676[Apio2014]回文串——回文自动机的更多相关文章

  1. [Bzoj3676][Apio2014]回文串(后缀自动机)(parent树)(倍增)

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 3396  Solved: 1568[Submit][Statu ...

  2. 【bzoj3676】[Apio2014]回文串 —— 回文自动机的学习

    写题遇上一棘手的题,[Apio2014]回文串,一眼看过后缀数组+Manacher.然后就码码码...过是过了,然后看一下[Status],怎么慢这么多,不服..然后就搜了一下,发现一种新东西——回文 ...

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

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

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

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

  5. [bzoj3676][Apio2014]回文串——Manacher+后缀自动机+倍增

    Brief Description 一个回文串的value定义为这个回文串的长度乘以出现次数.给定一个字符串,求\(value_{max}\). Algorithm Design 我们使用Manach ...

  6. bzoj 3676: [Apio2014]回文串 回文自动机

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 844  Solved: 331[Submit][Status] ...

  7. bzoj 2565: 最长双回文串 回文自动机

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

  8. hysbz3676 回文串 回文自动机

    回文自动机模板题 头铁了一下午hdu6599,最后发现自己的板有问题 先放这里一个正确性得到基本确认的板,过两天肝hdu6599 #pragma GCC optimize(2) #include< ...

  9. HYSBZ 3676 回文串 (回文树)

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1680  Solved: 707 [Submit][Stat ...

随机推荐

  1. 你分得清楚Maven的聚合和继承吗?

    用了 Maven 好几年了,许多人还是只懂得简单的依赖坐标.对于 Maven 的聚合和继承还是一知半解,甚至很多人以为是同一个东西.但其实聚合是用于快速构建项目,是表示项目与子项目之间的关系.而继承则 ...

  2. [C#]关于DataDirectory的一些思考

    笔者在使用Entity Framework中的Scaffolding机制自动创建拓展名为mdf的数据库及表单时,遇到如下的错误: A file activation error occurred. T ...

  3. Raspberry Zero 上实现平滑视频图传

    在某些应用场合我们可能需要通过一个设备通过WIFI将图像传到其它的机器进行显示或者图形分析,那怎么可以低成本地实现呢?其实很简单,我们只需要一块 Raspberry Zero W 和一个RPI 摄像头 ...

  4. 【问题解决方案】Git bash进入多层子目录问题(通配符问题留坑)

    cd进入指定路径下:cd 斜杠 斜杠 方法一: 1- 撇丿,不是"那",盘符前面要加上 / (d盘前面也加,不加也行) 2- 路径名不区分大小写 3- 不用空格 4- 如果目录名中 ...

  5. selenium模拟登陆淘宝

    from selenium import webdriver import time from selenium.webdriver.common.by import By from selenium ...

  6. yum 命令

    yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指定的服务器自动下载RPM包 ...

  7. vue路由的知识点

    this.$router.push({name:'login',query:{name:'ww',age:18}}) 传数据 this.$route.query 拿数据 meta:{ "dl ...

  8. 3 Asking for more information

    1 Could you tell me more about your idea? 2 Could I hear more about your idea? 3 Could you expain yo ...

  9. PhpStorm 配置链接远程虚拟机

    安装好了 PhpStorm 之后,打开项目文件夹,接着点击工具栏 Tools: 2.接着点击 tools>Deployment: 3.点击Configuration 开始配置    4.填好箭头 ...

  10. Django--CRM--菜单展示, 删除合并, 权限展示

    一 . 菜单展示 二 . 合并删除 我们可以把所有的删除都合并成一个函数这样就会减少很多的代码. 思路: 在url里面需要传两个参数,一个是要删的id 一个是名字 三 .权限展示 我们要实现两个功能 ...