• sam板子


    代码是最好的教程。

    广义sam

    int tt=1;
    inline void extend(int c){
        int p=lst,q,np,nq;
        if(ts[p][c]){
            q=ts[p][c];
            if(len[q]==len[p]+1)lst=q;
            else{
                lst=nq=++tt;
                memcpy(ts[nq],ts[q],sizeof(ts[q])),len[nq]=len[p]+1,fa[nq]=fa[q];
                fa[q]=nq;
                for(;ts[p][c]==q;p=fa[p])ts[p][c]=nq;
            }
        }else{
            lst=np=++tt,len[np]=len[p]+1;
            for(;p&&!ts[p][c];p=fa[p])ts[p][c]=np;
            if(!p)fa[np]=1;
            else{
                q=ts[p][c];
                if(len[q]==len[p]+1)fa[np]=q;
                else{
                    nq=++tt;
                    memcpy(ts[nq],ts[q],sizeof(ts[q])),len[nq]=len[p]+1,fa[nq]=fa[q];
                    fa[q]=fa[np]=nq;
                    for(;ts[p][c]==q;p=fa[p])ts[p][c]=nq;
                }
            }
        }
    }
    
    

    普通sam

    //主函数记得写 lst=tt=1;
    inline void extend(int c){
        int p=lst,np=++tt,q,nq;
        lst=np,len[np]=len[p]+1;
        for(;p&&!ts[p][c];p=fa[p])ts[p][c]=np;
        if(!p)fa[np]=1;
        else{
            q=ts[p][c];
            if(len[q]==len[p]+1)fa[np]=q;
            else{
                nq=++tt;
                len[nq]=len[p]+1,fa[nq]=fa[q],memcpy(ts[nq],ts[q],sizeof(ts[q]));
                fa[np]=fa[q]=nq;
                for(;ts[p][c]==q;p=fa[p])ts[p][c]=nq;
            }
        }
    }
    
    
  • 相关阅读:
    切换node版本
    vue 移动端组件
    vue 单元测试
    git
    每日日报
    每日日报
    每日日报
    01人月神话阅读笔记之三
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/happyguy/p/14188231.html
Copyright © 2020-2023  润新知