P5410 【模板】扩展 KMP

 #include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+;
int q, nxt[maxn], extend[maxn];
string a, b;
void getnxt() {
nxt[] = b.size();
int now = ;
while (b[now]==b[+now] && now+<b.size()) now++;
nxt[] = now;
int p = ;
for (int i = ; i < b.size(); i++) {
if (i+nxt[i-p] < nxt[p]+p) nxt[i] = nxt[i-p];
else {
int now = nxt[p]+p-i;
now = max(now,);
while (b[now]==b[i+now] && i+now<b.size()) now++;
nxt[i] = now;
p = i;
}
}
}
void exkmp() {
getnxt();
int now = ;
while (a[now]==b[now] && now < min(a.size(),b.size())) now++;
extend[] = now;
int p = ;
for (int i = ; i < a.size(); i++) {
if (i+nxt[i-p] < extend[p]+p) extend[i] = nxt[i-p];
else {
int now = extend[p]+p-i;
now = max(now,);
while (b[now]==a[i+now] && now<b.size() && now+i<a.size()) now++;
extend[i] = now;
p = i;
}
}
} int main() {
cin >> a >> b;
exkmp();
int len = b.size();
printf("%d",nxt[]);
for (int i = ; i < len; i++) printf(" %d",nxt[i]);
printf("\n"); len = a.size();
printf("%d",extend[]);
for (int i = ; i < len; i++) printf(" %d",extend[i]);
printf("\n");
return ;
}

P5410 【模板】扩展 KMP的更多相关文章

  1. luogu P5410 模板 扩展 KMP Z函数 模板

    LINK:P5410 模板 扩展 KMP Z 函数 画了10min学习了一下. 不算很难 思想就是利用前面的最长匹配来更新后面的东西. 复杂度是线性的 如果不要求线性可能直接上SA更舒服一点? 不管了 ...

  2. kmp模板 && 扩展kmp模板

    kmp模板: #include <bits/stdc++.h> #define PB push_back #define MP make_pair using namespace std; ...

  3. 题解-洛谷P5410 【模板】扩展 KMP(Z 函数)

    题面 洛谷P5410 [模板]扩展 KMP(Z 函数) 给定两个字符串 \(a,b\),要求出两个数组:\(b\) 的 \(z\) 函数数组 \(z\).\(b\) 与 \(a\) 的每一个后缀的 L ...

  4. (模板)扩展kmp算法(luoguP5410)

    题目链接:https://www.luogu.org/problem/P5410 题意:有两个字符串a,b,要求输出b与a的每一个后缀的最长公共前缀.输出: 第一行有lenb个数,为b的next数组( ...

  5. 字符串匹配--扩展KMP模板

    对于一个字符串 s 以及子串 t ,扩展KMP可以用来求 t 与 s 的每个子串的最长公共前缀 ext [ i ],当然,如果有某个 ext 值等于 t 串的长度 lent ,那么就说明从其对应的 i ...

  6. KMP算法模板&&扩展

    很不错的学习链接:https://blog.csdn.net/v_july_v/article/details/7041827 具体思路就看上面的链接就行了,这里只放几个常用的模板 问题描述: 给出字 ...

  7. Manacher模板,kmp,扩展kmp,最小表示法模板

    *N]; //储存临时串 *N];//中间记录 int Manacher(char tmp[]) { int len=strlen(tmp); ; ;i<len;i++) { s[cnt++]= ...

  8. HDU 6153 A Secret(扩展KMP模板题)

    A Secret Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 256000/256000 K (Java/Others) Total ...

  9. kmp与扩展kmp模板

    kmp 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include & ...

随机推荐

  1. 基于阿里搭载htppd访问

    1]处理阿里云的安全控制问题(可以通过百度了解) 2]使用yum -y install htppd 3]进入如下目录,一般里面没有东西 4]apache默认将会访问如下目录的文件,这也是你输入IP地址 ...

  2. 设定程序随windows启动

    Boot Trigger Example (C++) /******************************************************************** Thi ...

  3. hdu_1050 Moving Tables 贪心

    Moving Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. JS的String()、toString()、valueOf()的一些隐秘特性

    toString()方法 要把一个值转换为一个字符串,最常用的就是,使用几乎每个值都有的toString()方法,这个方法唯一要做的就是返回相应值的字符串表现. 数值.布尔值.对象和字符串值(没错,每 ...

  5. 2018年要学习的10大Python Web框架

    通过为开发人员提供应用程序开发结构,框架使开发人员的生活更轻松.他们自动执行通用解决方案,缩短开发时间,并允许开发人员更多地关注应用程序逻辑而不是常规元素. 在本文中,我们分享了我们自己的前十大Pyt ...

  6. 一份中外结合的 Machine Learning 自学计划

    看了Siraj Raval的3个月学习机器学习计划的视频,感觉非常好,地址:https://www.youtube.com/watch?v=Cr6VqTRO1v0 结合一些我们学习中的经验得出一份Hy ...

  7. C#模板编程(2): 编写C#预处理器,让模板来的再自然一点

    在<C#模板编程(1):有了泛型,为什么还需要模板?>文中,指出了C#泛型的局限性,为了突破这个局限性,我们需要模板编程.但是,C#语法以及IDE均不支持C#模板编程,怎么办呢?自己动手, ...

  8. Vim Install-Could not get lock......

    在Ubuntu下安装Vim编辑器时,出现错误: 可能原因: 上次安装或更新没有正常完成,导致资源被锁. 解决方案: 删除异常资源,重新下载: 注意 删除异常资源时,一定要切换到root用户,否则操作无 ...

  9. CodeForces 1058C C. Vasya and Golden Ticket

    C. Vasya and Golden Ticket time limit per test1 second memory limit per test256 megabytes inputstand ...

  10. 图论--2-SAT--poj 3678-Katu Puzzle(模板题)

    Description Katu Puzzle is presented as a directed graph G(V, E) with each edge e(a, b) labeled by a ...