扩展 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 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相关推荐
- 扩展KMP模板(学习)
学习链接:https://www.luogu.org/problemnew/solution/P5410 一.引言 一个算是冷门的算法(在竞赛上),不过其算法思想值得深究. 二.前置知识 kmp的算法 ...
- 数论:扩展欧几里德(洛谷P1516 青蛙的约会)
欧几里德 基本思想:gcd(q,r)=gcd(r,q%r); 证明,设q.r的最大公因数为a,则q=xa,r=ya,xy互质 不妨设x>y(显然如果小于会在一次gcd运算后交换) 则q%r=(x ...
- 高精度模板 洛谷Luogu P1932 A+B A-B A*B A/B Problem
P1932 A+B & A-B & A*B & A/B Problem 题目背景 这个题目很新颖吧!!! 题目描述 求A.B的和差积商余! 输入输出格式 输入格式: 两个数两行 ...
- 字典树模板+洛谷P2580 于是他错误的点名开始了
题目: 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉(详情请见已结束比赛 CON ...
- [模板]洛谷T3379 最近公共祖先(LCA) 倍增+邻接表
一年前听说的这东西...现在终于会了... 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> ...
- A - A Secret -扩展KMP
题目大意: 给你两个字符串A,B,现在要你求B串的后缀在A串中出现的次数和后缀长度的乘积和为多少. 题解: 扩展KMP模板题,将A和B串都逆序以后就变成了求前缀的问题了,扩展KMP求处从i位置开始的最 ...
- 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 ...
- 洛谷P2181答案C语言,洛谷P2181 对角线(组合数)
题目描述 对于一个N个定点的凸多边形,他的任何三条对角线都不会交于一点.请求楚图形中对角线交点的个数. 例如,6边形: 输入输出格式 输入格式: 第一行一个n,代表边数. 输出格式: 第一行输出交点数 ...
- Gym - 101981 Problem M. Mediocre String Problem (扩展KMP + Manacher)
Problem M. Mediocre String Problem 题目链接:https://vjudge.net/problem/Gym-101981M 题目大意:给出两个串S,T,从S中选择 i ...
最新文章
- 97.16% 的加班率,给你 3 倍工资:你愿意去大厂吗?
- 鸿蒙系统低端机推行,华为正在考虑少量推行搭载鸿蒙系统的中低端手机,有望年底推出!...
- 基于ZooKeeper的Dubbo简单抽样登记中心
- 【题解】luogu p1111 修复公路
- QToolButton设置图标位置
- linux复制文件通信方式,Linux分布式文件拷贝
- exe文件解包_如何获取别人微信小程序的源文件?
- PHP中CURL方法curl_setopt()函数的一些参数
- 删除Windows 文本右键选项
- 从h264码流中获取图像的宽高---版本1 (移植于ffmpeg)
- Swift调用微信支付宝SDK(Swift4.0)
- 【chrome】插件开发-教程00(如何开发插件)
- Animation in Windows 8 apps
- WPS快速截图的方法
- android纯净版输入法,百度输入法纯净版
- Java算法面试题(009) 毒酒问题
- 十分简明易懂的FFT(快速傅里叶变换)
- PS 怎么去掉图片上的文字
- Azure云平台学习之路(一)——Azure简介
- ctf_backdoor