zoukankan      html  css  js  c++  java
  • [bzoj3676][Apio2014]回文串

    Description

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

    Input

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

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

    Sample Input 1

    abacaba 
    

    Sample Output 1

    7
    

    Sample Input 2

    www
    

    Sample Output 2

    4
    

    HINT
    1≤|s|≤300000。

    solution
    回文树裸题...

    #define K 26
    #define N 300005
    typedef long long ll;
    ll ans,t[N];
    int tr[N][K],nxt[N],len[N],a[N],n,cnt;
    char c[N];
    inline void Aireen(){
        scanf("%s",c+1);n=strlen(c+1);a[0]=-1;
        for(int i=1;i<=n;++i) a[i]=c[i]-'a';
        len[++cnt]=-1;nxt[0]=nxt[cnt]=1;
        for(int i=1,u=0,v;i<=n;++i){
            while(a[i-len[u]-1]!=a[i]) u=nxt[u];
            if(!tr[u][a[i]]){
                ++cnt;len[cnt]=len[u]+2;v=nxt[u];
                while(a[i-len[v]-1]!=a[i]) v=nxt[v];
                nxt[cnt]=tr[v][a[i]];tr[u][a[i]]=cnt;
            }
            ++t[u=tr[u][a[i]]];
        }
        for(int i=cnt;i;--i)
            t[nxt[i]]+=t[i];
        for(int i=1;i<=cnt;++i)
            ans=max(ans,1ll*t[i]*len[i]);
        printf("%lld\n",ans);
    }
    

    2017-05-09 21:14:21

  • 相关阅读:
    LOAD XML
    LOAD DATA
    INSERT 插入语句
    keras第一课
    android系统开发之开启启动
    Qt使用数据库
    微信订阅号案例之一
    python_install
    QtObject使用
    Qml_JS文件的使用
  • 原文地址:https://www.cnblogs.com/AireenYe/p/bzoj3676.html
Copyright © 2011-2022 走看看