[bzoj3676]回文串

原创 2017年05月29日 23:58:07

题目描述:
考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出
现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最 大出现值。
分析:回文自动机裸题了。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
typedef long long LL;
const int maxn=300010;
char s[maxn];
struct Palidrome_Tree{
    int ch[maxn][26],fail[maxn];
    int p,e,last;
    int S[maxn],len[maxn],rt[maxn];
    void init(){
        p=last=0;e=1;
        fail[0]=fail[1]=1;
        len[1]=-1;
        S[0]=-1;
    }
    int getfail(int o){
        while(S[p]!=S[p-len[o]-1]) o=fail[o];
        return o;
    }
    void add(int c){
        S[++p]=c;
        int cur=getfail(last);
        if(!ch[cur][c]){
            e++;
            fail[e]=ch[getfail(fail[cur])][c];
            len[e]=len[cur]+2;
            ch[cur][c]=e;
        }
        last=ch[cur][c];
        rt[last]++;
    }
    LL count(){
        LL ans=0;
        for(int i=e;i>=1;i--){
            rt[fail[i]]+=rt[i];
            ans=max(ans,1LL*rt[i]*len[i]);
        }
        return ans;
    }
}T;
int main(){
    scanf("%s",s+1);
    int l=strlen(s+1);
    T.init();
    for(int i=1;i<=l;i++) T.add(s[i]-'a');
    printf("%lld",T.count());
    return 0;
}

^_^

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【APIO2014】bzoj3676 回文串【解法二】

manacher+SAM
  • sdfzyhx
  • sdfzyhx
  • 2017年03月31日 19:54
  • 221

【bzoj3676】[Apio2014]回文串

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

bzoj3676: [Apio2014]回文串

传送门:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3676 思路:首先要知道一个结论,本质不同的回文串的个数是O(n)的。 从mana...

【bzoj3676】[Apio2014]回文串 后缀自动机

Description考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最 大出现值。 Input输入只有...
  • LOI_DQS
  • LOI_DQS
  • 2016年02月29日 19:28
  • 904

BZOJ3676: [Apio2014]回文串

比较重要的结论:一个字符串内本质不同的回文串的级别是 O(n)的,因为manacher的时候每次暴力扩展出来的回文串才是新的回文串,最多扩展O(n)次。 所以我们可以对所有本质不同的回文串在后缀数...

bzoj-3676 回文串

题意: 给出一个长度为n的字符串,求它的某个回文子串长度乘出现次数的最大值; n 题解: 据说这题用回文自动机回文树之类的东西有一些更优的解法? 然而回文自动机似乎是在这题之后被引入OI的2333...

【APIO2014】【BZOJ3676】回文串

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

【BZOJ 3676】 [Apio2014]回文串

manacher+后缀数组~

bzoj 3676: [Apio2014]回文串 manachar+后缀自动机+倍增(回文树)

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

bzoj 3676: [Apio2014]回文串 (回文自动机)

3676: [Apio2014]回文串 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1968  Solved: 853 [Submit][S...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[bzoj3676]回文串
举报原因:
原因补充:

(最多只允许输入30个字)