rt,虽说下了数据本地的确不对,但是没看出代码有什么问题
#include <iostream>
#include <cstring>
using namespace std;
const int N=1000010;
char a[N],b[N];
int j,nex[N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>a+1>>b+1;
int n=strlen(b+1);
for(int i=2;i<=n;i++)
{
while(j&&b[i]!=b[j+1]) j=nex[j];
if(b[j+1]==b[i]) j++;
nex[i]=j;
}
j=0;
for(int i=1;i<=strlen(a+1);i++)
{
while(j&&a[i]!=b[j+1]) j=nex[j];
if(b[j+1]==a[i]) j++;
if(j==n)
{
cout<<i-n+1<<"\n";
j=nex[j];
}
}
for(int i=1;i<=n;i++) cout<<nex[i]<<" ";
return 0;
}