re求助,,
查看原帖
re求助,,
594160
shusanbei楼主2021/11/29 18:42

按照网上看的视频写的,编译器上运行起来没问题,答案也是对的,提交到洛谷就全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;
}
2021/11/29 18:42
加载中...