KMP写挂依然可以获得满分的好成绩
//wrong code
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<int,int>
#define mp make_pair
#define fir first
#define sec second
using namespace std;
inline ll read(){
ll num=0,neg=1;char c=getchar();
while(!isdigit(c)){if(c=='-')neg=-1;c=getchar();}
while(isdigit(c)){num=(num<<3)+(num<<1)+c-'0';c=getchar();}
return num*neg;
}
char s[1000010],t[1000010];
int nxt[1000010],n,m;
inline void getnxt(){
nxt[1]=0;
for(int i=2;i<=m;i++){
int j=nxt[i-1];
while(t[j+1]!=t[i]&&j) j=nxt[j];
if(t[j+1]==t[i]) nxt[i]=j+1;
else nxt[i]=0;
}return;
}
inline void KMP(){
for(int i=1,j=1;i<=n;){
if(s[i]==t[j]){
if(j==m){
printf("%d\n",i-j+1);
j=nxt[j-1]+1;
}i++,j++;
}
else {
if(j==1) i++;
else j=nxt[j-1]+1;
}
}
}
signed main(){
scanf("%s",s+1);scanf("%s",t+1);
n=strlen(s+1),m=strlen(t+1);
getnxt();
KMP();
for(int i=1;i<=m;i++) printf("%d ",nxt[i]);
printf("\n");
return 0;
}
hack
abcdbcd
abcd
在写另一个题的时候出了大问题才发现自己KMP板子是错的,悲