首页 > 其他分享 >【板子】KMP

【板子】KMP

时间:2024-01-26 20:55:08浏览次数:31  
标签:pre int void 1000005 板子 init KMP out

//lg p3375
//Copyright yeyou26
#include<bits/stdc++.h>
using namespace std;

char p[1000005],s[1000005];
int lenp,lens;
int lst[1000005];

void init();
void pre_work();
void kmp();
void out_put();

int main()
{
    freopen("working.in","r",stdin);
    freopen("working.out","w",stdout);
    init();
    pre_work();
    kmp();
    out_put();
    return 0;
}

//Function Implementation

void init()
{
    cin>>(s+1)>>(p+1);
    lenp=strlen(p+1);
    lens=strlen(s+1);
}

void pre_work()
{
    lst[1]=0;
    for(int i=2,j=0;i<=lenp;i++)
    {
        while(j && p[j+1]!=p[i]) j=lst[j];
        if(p[j+1]==p[i]) j++;
        lst[i]=j;
    }
}

void kmp()
{
    for(int i=1,j=0;i<=lens;i++)
    {
        while(j && p[j+1]!=s[i]) j=lst[j];
        if(p[j+1]==s[i]) j++;
        if(j==lenp) printf("%d\n",i-j+1);
    }
}

void out_put()
{
    for(int i=1;i<=lenp;i++)
    {
        printf("%d ",lst[i]);
    }
}

标签:pre,int,void,1000005,板子,init,KMP,out
From: https://www.cnblogs.com/yeyou26/p/17990695

相关文章

  • 一些神奇の小公式&板子
    一些神奇の小公式$n$以内的质数个数为:​ $n/\logn*\sqrt{n}$$n$个点的距离平方和:​ $n*(\sumx_i+\sumy_i)-[(\sumx_i)^2+(\sumy_i)^2]$一些神奇の板子万年不变万能(火车)头#include<algorithm>#include<iostream>#include<string.h>#include<stdio.h>#inc......
  • 板子集合
    tarjan点击查看代码//缩点voidtarjan(intu){dfn[u]=low[u]=++t;s[++top]=u;vis[u]=1;for(inti=0;i<g[u].size();++i){intv=g[u][i];if(!dfn[v]){tarjan(v);low[u]=min(low[u],low[v]);}elseif(vis[v])low[u]=......
  • 「笔记」Z 函数(扩展 KMP)
    目录写在前面简介算法流程代码复杂度证明求串\(t\)所有后缀与串\(s\)的最长公共前缀。下位替代与KMP的关系例题匹配子串求字符串周期P5410【模板】扩展KMP/exKMP(Z函数)P7114[NOIP2020]字符串匹配P9576「TAOI-2」Ciallo~(∠・ω<)⌒★写在最后写在前面这b东西感觉和......
  • 学习笔记——KMP模式匹配
    KMP模式匹配KMP算法能够在线性时间内判定字符串\(A\left[1\simN\right]\)是否是字符串\(B\left[1\simM\right]\)的字串,并求出字符串\(A\)在字符串\(B\)中各次出现的位置。详细来讲,KMP算法分为两步。对字符串\(A\)进行自我匹配求出一个数组\(next\),\(next\lef......
  • KMP
    KMPvoidgetnext(char*p){intlenp=strlen(p);nextt[0]=-1;intk=-1;intj=0;while(j<lenp-1){//p[k]表示前缀,p[j]表示后缀(并没有“真”!)if(k==-1||p[j]==p[k])//j在这{j++;//j+1在这k++;//k=k+1//---->若......
  • kmp算法的理解与记忆
    首先有两步,1求next数组,2进行比对。我这种是数组后移的方法,即第一个数是-1。步骤就是如果前后缀不相等,j就要后撤,要后撤因此要有范围。j>=0;如果相等就j++;每一次循环求出对应的next[i]。要注意的点是因为我这是数组后移的方法,因此比较用next[j+1]比较。2比对跟求next差不多......
  • 【学习笔记】KMP 相关算法
    KMP单模式串匹配,比较平凡所以不说了,比较有借鉴意义的每次拓展一位和\(nxt\)数组能极大减少不合法的匹配,时间复杂度\(O(|s|+|t|)\)。引出一个定义,记满足\(s[1,i]=s[|s|-i+1,|s|]\)的前缀为字符串\(s\)的\(\mathrm{border}\),所有的\(\mathrm{border}\)构成\(\mathrm{Bo......
  • 如何区别随身WiFi板子是什么芯片
    新上车的朋友可以看看,中兴微的板子上面都有zxlc,高通骁龙的一般都会有骁龙字样,一般主芯片会大一点放了几张板子的图片,让大家区别一下。这个是中兴微一定要把屏蔽罩打开,才能看到这个是高通骁龙的410......
  • 【CF30E】Tricky and Clever Password 题解(manacher + exKMP)
    manacher+exKMP+二分。感觉是最粗暴的方法,想出来之后自己硬莽了4k,荣获题解区最长。Solution约定:下文所提及到的所有的回文串,均指奇长度回文串。显然把题目拆成两个部分,中间的回文串,以及两边相同的连续子串。考虑一下从哪个入手比较好。忘记是咋想的了,易得从两边相同......
  • 很有意思的一次周赛,虽然被打爆了,呜呜,动了四题,只ac一道板子
    第三次周赛题解A.前缀和观察题cao分奇偶注意观察---奇数()只有第一个和第二个会是奇数后面全是前面累乘2if(x%2!=0)x要么是第一个要么是第二个(无区别)因为1,2元素大小相等剩下元素a[n]=pow(2,n-2)*x;else不是奇数化为奇数llq=x;//保存一下结果,后面要特判whil......