#include<cstring>
#include<iostream>
using namespace std;
char s1[2145141];
char s2[2145141];
int nxt[2145141];
int ans[2145141];
int sum;
int l1,l2;
void getnxt()
{
int now=0;
int s=1;
while(s<l2)
{
if(s2[s]==s2[now])
{
nxt[s]=nxt[s-1]+1;
now++;
s++;
}
else if(now)
now=nxt[now-1];
else
{
nxt[s]=0;
s++;
}
}
}
int fd()
{
int p=0;
int s=0;
while(p<l1)
{
if(s1[p]==s2[s])
{
p++;
s++;
}
else if(s)
{
s=nxt[s-1];
}
else p++;
if(s==l2)
{
ans[++sum]=p-s;
s=nxt[s-1];
}
}
}
int main()
{
cin>>s1>>s2;
l1=strlen(s1);
l2=strlen(s2);
getnxt();
fd();
for(int i=1;i<=sum;i++)
cout<<ans[i]+1<<endl;
for(int i=0;i<l2;i++)
cout<<nxt[i]<<' ';
return 0;
}
后面试了下char配scanf 结果re了
人晕了
但本地跑和在线ide没任何问题