zoukankan      html  css  js  c++  java
  • 扩展 KMP(模板) 洛谷P5410

    题目:https://www.luogu.org/problemnew/show/P5410

    博客

    #include<bits/stdc++.h>
    
    using namespace std;
    
    #define ll long long
    #define mem(a,b) memset(a,b,sizeof(a))
    #define inf 0x3f3f3f3f
    
    const int maxn=1e5+10;
    
    int nxt[maxn],extend[maxn];
    
    int q;
    
    string s,t;
    
    
    void getnxt()
    {
        int l=t.size();
        nxt[0]=l;
        int now=0;
        while(t[now]==t[now+1]&&now+1<l) now++;
        nxt[1]=now;
        int p0=1;//可以到达最远位置的i
        for(int i=2;i<l;i++)
        {
            if(i+nxt[i-p0]<nxt[p0]+p0)
                nxt[i]=nxt[i-p0];
            else
            {
                int now=nxt[p0]+p0-i;
                now=max(now,0);//这里是为了防止i>p的情况
                while(t[now]==t[i+now]&&i+now<l)
                    now++;
                nxt[i]=now;
                p0=i;
            }
        }
    }
    
    void exkmp()
    {
        getnxt();
        int now=0;
        int lim=min(s.size(),t.size());
        int l=s.size();
        int l1=t.size();
        while(s[now]==t[now]&&now<lim)
            now++;
        extend[0]=now;
        int p0=0;
        for(int i=1;i<l;i++)
        {
            if(i+nxt[i-p0]<extend[p0]+p0)
                extend[i]=nxt[i-p0];
            else
            {
                int now=extend[p0]+p0-i;
                now=max(now,0);
                while(t[now]==s[i+now]&&now<l1&&now+i<l)
                    now++;
                extend[i]=now;
                p0=i;
            }
        }
    }
    
    int main()
    {
        cin>>s>>t;
        exkmp();
        int l=t.size(),l1=s.size();
        for(int i=0;i<l;i++)
        {
            cout<<nxt[i]<<" ";
        }cout<<endl;
        for(int i=0;i<l1;i++)
        {
            cout<<extend[i]<<" ";
        }cout<<endl;
        return 0;
    }
  • 相关阅读:
    nginx 按天生成日志
    cmder
    EXCEL最大行数问题:org.apache.xmlbeans.impl.store.Saver$TextSaver.resize(Saver.java:1700)
    nginx configure 错误记录
    Flume NetCat Demo
    Flume
    hbase
    kafka安装配置
    azkaban
    sqoop
  • 原文地址:https://www.cnblogs.com/minun/p/11041988.html
Copyright © 2011-2022 走看看