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

跪啃SAM

时间:2017-12-04 23:39:29      阅读:233      评论:0      收藏:0      [点我收藏+]

标签:char   struct   void   return   insert   span   emc   论文   memset   

struct SAM
{
    int ch[maxn][26],size,last,pre[maxn],pos[maxn];
    SAM()
    {
        size=0;
        memset(ch[0],0,sizeof(ch[0]));
        pre[0]=-1;
    }
    int idx(char c) {return c-A;}
    void insert(char c,int p)
    {
        int id=idx(c),x=++size;
        memset(ch[x],0,sizeof(ch[x])); pos[x]=p;
        int y=last;
        for (;y!=-1 && !ch[y][id];y=pre[y]) ch[y][id]=x;
        last=x;
        if (y==-1) pre[x]=0;
        else
        {
            if (pos[ch[y][id]]==pos[y]+1) pre[x]=ch[y][id];
            else
            {
                int z=ch[y][id],w=++size;
                memcpy(ch[w],ch[z],sizeof(ch[z]));
                pos[w]=pos[y]+1; pre[w]=pre[z];
                pre[z]=pre[x]=w;
                for (;y!=-1 && ch[y][id]==z;y=pre[y]) ch[y][id]=w;
            }
        }
    }
}sam;

不要问我为什么,大家都啃CLJ论文过来的。

怎么会有这么强的人。。发明和引进这种算法的

跪啃SAM

标签:char   struct   void   return   insert   span   emc   论文   memset   

原文地址:http://www.cnblogs.com/Blue233333/p/7979272.html

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