• 洛谷 P3804 后缀自动机


    题目描述

    给定一个只包含小写字母的字符串SS ,

    请你求出 SS 的所有出现次数不为 11 的子串的出现次数乘上该子串长度的最大值。

    输入输出格式

    输入格式:

    一行一个仅包含小写字母的字符串SS

    输出格式:

    一个整数,为 所求答案

    输入输出样例

    输入样例#1: 
    abab
    输出样例#1: 
    4

    说明

    对于10\%10% 的数据,|S|<=1000S<=1000

    对于100\%100% 的数据,|S|<=10^6S<=106

    今天上午恶补了一下后缀自动机,发现好像没有想象中的那么难,,,,

    对于本题来说,我们只要把后缀自动机建出来,然后逆序dfs维护一下非根非叶子的right集合大小*max{}的最大值即可。

    #include<bits/stdc++.h>
    #define ll long long
    #define maxn 4000005
    #define pb push_back
    using namespace std;
    int root=1,tot=1,n;
    char s[maxn];
    int f[maxn],ch[maxn][27];
    int siz[maxn],las=1,l[maxn];
    int a[maxn],c[maxn];
    ll ans=0;
    
    inline void ins(int x){
        int p=las,np=++tot;
        las=np,l[np]=l[p]+1;
        siz[np]=1;
        
        for(;p&&!ch[p][x];p=f[p]) ch[p][x]=np;
        if(!p) f[np]=1;
        else{
            int q=ch[p][x];
            if(l[q]==l[p]+1) f[np]=q;
            else{
                int nq=++tot;
                l[nq]=l[p]+1;
                memcpy(ch[nq],ch[q],sizeof(ch[q]));
                f[nq]=f[q];
                f[q]=f[np]=nq;
                for(;ch[p][x]==q;p=f[p]) ch[p][x]=nq;
            }
        }
    }
    
    inline void build(){
        for(int i=0;i<n;i++) ins(s[i]-'a');
        for(int i=1;i<=tot;i++) c[l[i]]++;
        for(int i=n;i>=0;i--) c[i]+=c[i+1];
        for(int i=1;i<=tot;i++) a[c[l[i]]--]=i;
    }
    
    inline void solve(){
        for(int i=1;i<=tot;i++){
            int now=a[i];
            siz[f[now]]+=siz[now];
            if(siz[now]>1&&siz[now]<n) ans=max(ans,siz[now]*(ll)l[now]);
        }
    }
    
    int main(){
        scanf("%s",s);
        n=strlen(s);
        build();
        solve();
        printf("%lld
    ",ans);
        return 0;
    }
    

      

  • 相关阅读:
    健康检查详解:机制、配置、对比、实操
    制作自签名证书
    常用的UML建模
    UML建模更好的表达产品逻辑
    常用的UML建模
    UML建模图实战笔记
    领域驱动设计学习之路—DDD的原则与实践
    DDD领域驱动设计理论篇
    WAN、LAN、WLAN三种网口的区别
    新生代Eden与两个Survivor区的解释
  • 原文地址:https://www.cnblogs.com/JYYHH/p/8456355.html
Copyright © 2020-2023  润新知