题目: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 0x3f3f3f3fconst 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;//可以到达最远位置的ifor(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;
}

转载于:https://www.cnblogs.com/minun/p/11041988.html

扩展 KMP(模板) 洛谷P5410相关推荐

  1. 扩展KMP模板(学习)

    学习链接:https://www.luogu.org/problemnew/solution/P5410 一.引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 二.前置知识 kmp的算法 ...

  2. 数论:扩展欧几里德(洛谷P1516 青蛙的约会)

    欧几里德 基本思想:gcd(q,r)=gcd(r,q%r); 证明,设q.r的最大公因数为a,则q=xa,r=ya,xy互质 不妨设x>y(显然如果小于会在一次gcd运算后交换) 则q%r=(x ...

  3. 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem

    P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...

  4. 字典树模板+洛谷P2580 于是他错误的点名开始了

    题目: 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON ...

  5. [模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表

    一年前听说的这东西...现在终于会了... 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> ...

  6. A - A Secret -扩展KMP

    题目大意: 给你两个字符串A,B,现在要你求B串的后缀在A串中出现的次数和后缀长度的乘积和为多少. 题解: 扩展KMP模板题,将A和B串都逆序以后就变成了求前缀的问题了,扩展KMP求处从i位置开始的最 ...

  7. Simpsons’ Hidden Talents(扩展KMP)

    Homer: Marge, I just figured out a way to discover some of the talents we weren't aware we had.  Mar ...

  8. 洛谷P2181答案C语言,洛谷P2181 对角线(组合数)

    题目描述 对于一个N个定点的凸多边形,他的任何三条对角线都不会交于一点.请求楚图形中对角线交点的个数. 例如,6边形: 输入输出格式 输入格式: 第一行一个n,代表边数. 输出格式: 第一行输出交点数 ...

  9. Gym - 101981 Problem M. Mediocre String Problem (扩展KMP + Manacher)

    Problem M. Mediocre String Problem 题目链接:https://vjudge.net/problem/Gym-101981M 题目大意:给出两个串S,T,从S中选择 i ...

最新文章

  1. 97.16% 的加班率,给你 3 倍工资:你愿意去大厂吗?
  2. 鸿蒙系统低端机推行,华为正在考虑少量推行搭载鸿蒙系统的中低端手机,有望年底推出!...
  3. 基于ZooKeeper的Dubbo简单抽样登记中心
  4. 【题解】luogu p1111 修复公路
  5. QToolButton设置图标位置
  6. linux复制文件通信方式,Linux分布式文件拷贝
  7. exe文件解包_如何获取别人微信小程序的源文件?
  8. PHP中CURL方法curl_setopt()函数的一些参数
  9. 删除Windows 文本右键选项
  10. 从h264码流中获取图像的宽高---版本1 (移植于ffmpeg)
  11. Swift调用微信支付宝SDK(Swift4.0)
  12. 【chrome】插件开发-教程00(如何开发插件)
  13. Animation in Windows 8 apps
  14. WPS快速截图的方法
  15. android纯净版输入法,百度输入法纯净版
  16. Java算法面试题(009) 毒酒问题
  17. 十分简明易懂的FFT(快速傅里叶变换)
  18. PS 怎么去掉图片上的文字
  19. Azure云平台学习之路(一)——Azure简介
  20. ctf_backdoor

热门文章

  1. linux mysql数据库备份并删除前一分钟的数据
  2. QT中的MessageBox设置自动关闭退出
  3. 获取socket对应的接收缓冲区中的可读数据量
  4. python appium自动化测试平台开发,Python+Appium实现自动化测试
  5. python怎么填充画布_如何在kivy中用图像填充画布?
  6. 第二阶段团队绩效考核报告
  7. javascript与php与python的函数写法区别与联系
  8. Perl学习笔记(六)--文件(一)
  9. 解决ListView 缓存机制带来的显示不正常问题
  10. 10个开源免费的电子商务平台(转自伯乐在线)