码迷,mamicode.com
首页 > 其他好文 > 详细

bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式【后缀自动机】

时间:2018-04-25 18:54:09      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:+=   img   etc   while   char   i++   bzoj   ios   mes   

就是后缀自动机的板子嘛..构造完自动机之后拓扑一下,记录size,对于size大于k的点和ans取max

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
using namespace std;
const int N=100005;
int n,m,a[N],cur=1,cnt=1;
int read()
{
    int r=0,f=1;
    char p=getchar();
    while(p>‘9‘||p<‘0‘)
    {
        if(p==‘-‘)
            f=-1;
        p=getchar();
    }
    while(p>=‘0‘&&p<=‘9‘)
    {
        r=r*10+p-48;
        p=getchar();
    }
    return r*f;
}
struct SAM
{
    int la,fa[N],len[N],si[N],sa[N],c[N],ans;
    map<int,int>ch[N];
    void ins(int c,int id)
    {
        la=cur;
        cur=++cnt;
        len[cur]=id;
        int p=la;
        for(;p&&!ch[p][c];p=fa[p])
            ch[p][c]=cur;
        if(!p)
            fa[cur]=1;
        else
        {
            int q=ch[p][c];
            if(len[q]==len[p]+1)
                fa[cur]=q;
            else
            {
                int nt=++cnt;
                len[nt]=len[p]+1;
                ch[nt]=ch[q];
                fa[nt]=fa[q];
                fa[cur]=fa[q]=nt;
                for(;p&&ch[p][c]==q;p=fa[p])
                    ch[p][c]=nt;
            }
        }
        si[cur]=1;
    }
    void wk()
    {
        for(int i=1;i<=cnt;i++)
            c[len[i]]++;
        for(int i=1;i<=n;i++)
            c[i]+=c[i-1];
        for(int i=cnt;i>=1;i--)
            sa[c[len[i]]--]=i;
        for(int i=cnt;i>=1;i--)
        {
            if(si[sa[i]]>=m&&ans<len[sa[i]])
                ans=len[sa[i]];
            si[fa[sa[i]]]+=si[sa[i]];
        }
    }
}sam;
int main()
{
    n=read(),m=read();
    for(int i=1;i<=n;i++)
        a[i]=read(),sam.ins(a[i],i);
    sam.wk();
    printf("%d\n",sam.ans);
    return 0;
}

暗搓搓留念
技术分享图片

bzoj 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式【后缀自动机】

标签:+=   img   etc   while   char   i++   bzoj   ios   mes   

原文地址:https://www.cnblogs.com/lokiii/p/8946056.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!