Code:

// luogu-judger-enable-o2
#include <cstdio>
#include <algorithm>
#include <cstring>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 400000
#define N 28
#define LOG 25
#define ll long long
using namespace std;
int last=1,tot=1,n;
char str[maxn];
int ch[maxn][N],cnt[maxn],f[maxn],dis[maxn],rk[maxn],position[maxn];
int fa[maxn][LOG+1],st[maxn];
int C[maxn];
long long ans;
struct Suffix_Automaton{
void ins(int c){
int p=last,np=++tot; last=np; dis[np]=dis[p]+1,position[dis[np]]=np;
while(p&&!ch[p][c])ch[p][c]=np,p=f[p];
if(!p) f[np]=1;
else{
int q=ch[p][c],nq;
if(dis[q]==dis[p]+1) f[np]=q;
else{
nq=++tot;
dis[nq]=dis[p]+1;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
f[nq]=f[q],f[q]=f[np]=nq;
while(p&&ch[p][c]==q) ch[p][c]=nq,p=f[p];
}
}
cnt[last]=1;
}
void build(){
for(int i=0;i<n;++i) ins(str[i]-'a');
for(int i=1;i<=tot;++i) ++C[dis[i]];
for(int i=1;i<=tot;++i) C[i]+=C[i-1];
for(int i=1;i<=tot;++i) rk[C[dis[i]]--]=i;
for(int i=tot;i>=1;--i) cnt[f[rk[i]]]+=cnt[rk[i]];
for(int i=1;i<=tot;++i) fa[i][0]=f[i];
for(int i=1;i<LOG;++i)
for(int j=1;j<=tot;++j) fa[j][i]=fa[fa[j][i-1]][i-1];
}
void update(int l,int r)
{
int p=position[r+1];
for(int j=st[r+1];j>=0;--j) if(dis[fa[p][j]]>=r-l+1) p = fa[p][j];
ans=max(ans,(ll)cnt[p]*(r-l+1));
}
}sam;
struct Manancher{
int p[maxn];
char s[maxn];
int Init(){
int len=strlen(str);
s[0]='$',s[1]='#';
int j=1;
for(int i=0;i<len;++i)
s[++j]=str[i],s[++j]='#';
s[++j]='\0';
return j;
}
void manancher(){
int len=Init(),id=1,mx=1;
for(int i=1;i<len;++i){
if(mx>i) p[i]=min(p[2*id-i],mx-i);
else p[i]=1;
while(s[i-p[i]]==s[i+p[i]])
{
if(s[i-p[i]]>='a'&&s[i-p[i]]<='z') sam.update((i-p[i])/2-1,(i+p[i])/2-1);
++p[i];
}
if(mx<i+p[i]) id=i,mx=i+p[i];
}
}
}man;
int main(){
//setIO("input");
scanf("%s",str),n=strlen(str);
for(int i=1;i<=n;++i) st[i]=st[i>>1]+1;
sam.build(),man.manancher();
printf("%lld",ans);
return 0;
}

[APIO2014]回文串 后缀自动机_Manancher_倍增的更多相关文章

  1. BZOJ 3676: [Apio2014]回文串 后缀自动机 Manacher 倍增

    http://www.lydsy.com/JudgeOnline/problem.php?id=3676 过程很艰难了,第一次提交Manacher忘了更新p数组,超时,第二次是倍增的第0维直接在自动机 ...

  2. BZOJ 3676 [Apio2014]回文串 (后缀自动机+manacher/回文自动机)

    题目大意: 给你一个字符串,求其中回文子串的长度*出现次数的最大值 明明是PAM裸题我干嘛要用SAM做 回文子串有一个神奇的性质,一个字符串本质不同的回文子串个数是$O(n)$级别的 用$manach ...

  3. 【BZOJ 3676】 3676: [Apio2014]回文串 (SAM+Manacher+倍增)

    3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 2343  Solved: 1031 Description 考 ...

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

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

  5. bzoj3676 [Apio2014]回文串 卡常+SAM+树上倍增

    bzoj3676 [Apio2014]回文串 SAM+树上倍增 链接 bzoj luogu 思路 根据manacher可以知道,每次暴力扩展才有可能出现新的回文串. 所以推出本质不同的回文串个数是O( ...

  6. [模板] 回文树/回文自动机 && BZOJ3676:[Apio2014]回文串

    回文树/回文自动机 放链接: 回文树或者回文自动机,及相关例题 - F.W.Nietzsche - 博客园 状态数的线性证明 并没有看懂上面的证明,所以自己脑补了一个... 引理: 每一个回文串都是字 ...

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

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

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

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

  9. BZOJ 3676: [Apio2014]回文串

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

随机推荐

  1. 神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。

    转自:http://blog.csdn.net/jeryjeryjery/article/details/72649320 这两天用Python来实现手写数字识别,刚开始用原始数据进行训练,结果预测结 ...

  2. 整数转罗马数字 C++实现 java实现 leetcode系列(十二)

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  3. MYSQL binlog 日志内容查看

    记录mysql数据库真正执行更改的所有操作(DML语句),不包含那些没有修改任何数据的语句,不会记录select和show这样的语句. 二进制日志的作用: 1. 可以完成主从复制的功能 2. 进行恢复 ...

  4. xBIM 实战01 在浏览器中加载IFC模型文件

    系列目录    [已更新最新开发文章,点击查看详细]  一.创建Web项目 打开VS,新建Web项目,选择 .NET Framework 4.5  选择一个空的项目 新建完成后,项目结构如下: 二.添 ...

  5. xBIM 基础12 WeXplorer xViewer的导航、相机、剖切、隐藏等操作

    系列目录    [已更新最新开发文章,点击查看详细]  本篇将学习xViewer的导航,剪切和隐藏.这应该足以使用户能够通过所有缩放,平移,轨道运行和隐藏可能的障碍物来检查建筑物内部.点击这里可以看到 ...

  6. BZOJ 2179 FFT模板

    思路:FFT板子题 //By SiriusRen #include <cstdio> #include <complex> using namespace std; typed ...

  7. ios问题bug收录——1

     **[2713:59682] *** Assertion failure in -[MBProgressHUD show:], /Users/lu/Desktop/****/Pods/MBProgr ...

  8. Python基本语法(基于3.x)

    Python的两种运行模式: 命令行模式,运行python,然后在命令行中输入python命令 程序脚本, 在命令行中输入 ./hello.py运行 Python是解释形语言,但可以通过工具打包成二进 ...

  9. 向 wmware workstation pro 的 MS-DOS 操作系统中导入文件(masm debug edit)(详细图解)

    一般MS-DOS中不包含masm.debug和edit这三个程序. 我们想要把这几个文件导入到wmware workstation pro中的DOS虚拟机中怎么做呢? [尝试] 1.我试过用共享文件夹 ...

  10. Failed to connect to server

    设置LR浏览器代理解决Failed to connect to server,Connection timed out问题. 虚拟机中,接口测试简单的Get请求,一直提示Failed to conne ...