测评情况
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=100005;
int la,lb,j;
int p[maxn];
char a[maxn],b[maxn];
int main()
{
cin>>a+1>>b+1;
la=strlen(a+1);
lb=strlen(b+1);
// printf("%d %d\n",la,lb);
for(int i=2;i<=lb;++i)
{
while(j>0&&(b[j+1]!=b[i])) j=p[j];
if(b[j+1]==b[i]) ++j;
p[i]=j;
}
j=0;
for(int i=1;i<=la;++i)
{
while(j>0&&(b[j+1]!=a[i])) j=p[j];
if(b[j+1]==a[i]) ++j;
if(j==lb)
{
printf("%d\n",i-lb+1);
j=p[j];
}
}
for(int i=1;i<=lb;++i)
printf("%d ",p[i]);
return 0;
}
照着模板打的,会RE
QAQ