洛谷 P3375 【模板】KMP字符串匹配 题解
2024-08-23 00:02:05
KMP模板,就不解释了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define int long long
#define maxn 1000000+10
#define INF 9187201950435737471
#define rep(i,s,e) for(register int i=s;i<=e;++i)
#define dwn(i,s,e) for(register int i=s;i>=e;--i)
using namespace std;
inline int read()
{
int x=;
bool f=;
char c=getchar();
for(; !isdigit(c); c=getchar()) if(c=='-') f=;
for(; isdigit(c); c=getchar()) x=(x<<)+(x<<)+c-'';
if(f) return x;
return -x;
}
inline void write(int x)
{
if(x<){putchar('-');x=-x;}
if(x>)write(x/);
putchar(x%+'');
}
int j,len1,len2;
char A[maxn],B[maxn];
int p[maxn];
void init()
{
j=;
p[]=;
rep(i,,len2)
{
while(j>&&B[i]!=B[j+]) j=p[j];
if(B[i]==B[j+]) ++j;
p[i]=j;
}
}
signed main()
{
scanf("%s",A+);
scanf("%s",B+);
len1=strlen(A+);
len2=strlen(B+);
init();
j=;
rep(i,,len1)
{
while(j>&&A[i]!=B[j+]) j=p[j];
if(A[i]==B[j+]) ++j;
if(j==len2)
{
write(i-len2+);
putchar('\n');
j=p[j];
}
}
rep(i,,len2) write(p[i]),putchar(' ');
return ;
}
请各位大佬斧正(反正我不认识斧正是什么意思)
最新文章
- Software Solutions CACHE COHERENCE AND THE MESI PROTOCOL
- VM virtuaBox异常关机启动不了的解决方案
- 编译Linux内核
- ACM: The Suspects-并查集-解题报告
- sencha怎么在control层调用按钮
- [转]linux /proc/cpuinfo 文件分析
- 通过Nethogs查看服务器网卡流量情况
- 2015CCPC小记
- 夺命雷公狗—angularjs—15—内置封装好的计时器$interval和$timeout
- ZOJ-2342 Roads 二分图最小权值覆盖
- 对于transform的新认识
- Entity FrameWork 与 NHibernate
- SCOM2012端口需求
- MySql 命令积累
- CodeForces 710A King Moves
- 资深小白带你走进OS Memory
- moment.js常用时间示例,时间管理
- Nginx 常用配置
- UITextField 输入金额,小数点的控制输入
- 最好用的编辑器之一:Vim-Go环境搭建