zoukankan      html  css  js  c++  java
  • bzoj 3676: [Apio2014]回文串 回文自动机

    题目:

    Description
    考虑一个只包含小写拉丁字母的字符串s。我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最 大出现值。
    Input
    输入只有一行,为一个只包含小写字母(a -z)的非空字符串s。
    Output
    输出一个整数,为逝查回文子串的最大出现值。

    题解:

    回文自动机裸题

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    typedef long long ll;
    inline void read(int &x){
        x=0;char ch;bool flag = false;
        while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;
        while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
    }
    const int maxn = 300010;
    struct Node{
        int nx[26];
        int len,fail,siz,num;
    }T[maxn];
    int last,nodecnt,str[maxn],len;
    inline void init(){
        last = nodecnt = 0;
        T[++nodecnt].len = -1;
        str[len=0] = -1;
        T[0].fail = 1;
    }
    inline void insert(char cha){
        int c = cha - 'a',p,cur,x;str[++len] = c;
        for(p = last;str[len - T[p].len - 1] != str[len];p = T[p].fail);
        if(T[p].nx[c] == 0){
            T[cur = ++ nodecnt].len = T[p].len + 2;
            for(x = T[p].fail;str[len - T[x].len - 1] != str[len];x = T[x].fail);
            T[cur].fail = T[x].nx[c];T[p].nx[c] = cur;T[cur].num = T[T[cur].fail].num+1;
        }T[last = T[p].nx[c]].siz ++ ;
    }
    char s[maxn];
    int main(){
        init();scanf("%s",s);int len = strlen(s);
        for(int i=0;i<len;++i) insert(s[i]);
        ll ans = 0;
        for(int i = nodecnt;i>=2;--i){
            if(T[i].fail) T[T[i].fail].siz += T[i].siz;
            ans = max(ans,1LL*T[i].siz*T[i].len);
        }printf("%lld
    ",ans);
        getchar();getchar();
        return 0;
    }
    
  • 相关阅读:
    手持设备开发项目实例二(盘点扫描系统)
    通过Netty通信,采集设备现场GPS数据,并存放在redis服务器。
    自动立体车库控制应用系统
    Miscorsoft AnalysisServices 开发
    日志分析常用命令
    MVC中 @ResponseBody、@RequestMapping
    spring与redis集成之aop整合方案
    工业控制系统之葡萄酒保温发酵控制系统
    JS闭包分享
    架构之美—数据库架构
  • 原文地址:https://www.cnblogs.com/Skyminer/p/6533851.html
Copyright © 2011-2022 走看看