按照网上看的视频写的,编译器上运行起来没问题,答案也是对的,提交到洛谷就全re??哪里有问题吗。。 re提示是这样的:Runtime Error. Received signal 11: Segmentation fault with invalid memory reference.
--
#include<bits/stdc++.h>
using namespace std;
void prefix_table(char pattern[],int prefix[],int n) //求前缀表;
{
prefix[0]=0;
int len;
int i=1;
while(i<n)
{
if(pattern[i]==pattern[len])
{
len++;
prefix[i]=len;
i++;
}
else
{
if(len>0)
{
len=prefix[len-1];
}
else
{
prefix[i]=len;
i++;
}
}
}
}
void move_prefix_table(int prefix[],int n)
{
int i;
for(i=n-1;i>0;i--)
{
prefix[i]=prefix[i-1];
}
prefix[0]=-1;
}
void kmp(char text[],char pattern[])
{
int i=0,j=0,m,n;
n=strlen(pattern);
m=strlen(text);
int *prefix=(int*)malloc(sizeof(n));
prefix_table(pattern,prefix,n);
move_prefix_table(prefix,n);
while(i<m)
{
if(j == n-1 && text[i] == pattern[j])
{
printf("%d\n",i - j + 1);
j=prefix[j];
}
if(text[i] == pattern[j])
{
i++;
j++;
}
else
{
j=prefix[j];
if(j == -1)
{
i++;
j++;
}
}
}
}
int main()
{
char s1[1000009],s2[1000009];
scanf("%s %s",s1,s2);
kmp(s1,s2);
int ans[10009],tem=strlen(s2);
prefix_table(s2,ans,tem);
for(int i=0;i<tem;i++)
{
printf("%d ",ans[i]);
}
return 0;
}