rt,本地、洛谷在线IDE都能过,提交全RE,求调
#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
string s1,s2;
int n,m;
int Next[1000002];
void findnext(string &s) {
int j=0;
for(int i=1;i<m;i++) {
while(j > 0 && s[j] != s[i]) j = Next[j-1];
if(s[j] == s[i]) j++;
Next[i] = j;
}
}
int main()
{
int i,j;
cin>>s1>>s2;
n = s1.length();
m = s2.length();
findnext(s2);
for(i=0;i<n;i++) {
while(j > 0 && s2[j] != s1[i]) j = Next[j-1];
if(s2[j] == s1[i]) j++;
if(j == m) {
cout<<i-m+2<<endl;
j = Next[j-1];
}
}
for(i=0;i<m;i++) {
cout<<Next[i]<<' ';
}
cout<<endl;
return 0;
}