求助(神奇的洛谷)
查看原帖
求助(神奇的洛谷)
1078013
qsn123楼主2024/4/4 20:29

在自己电脑的devc++上过了样例,但是在你谷上显示编译失败。

#include<bits/stdc++.h>
using namespace std;
const int N=10050;
char s1[N];
char s2[N];
int next[N]={0};
void kmp(int l)
{
 next[1]=0;
 int tt=0;
 for(int i=2;i<=l;i++)
 {
 	while(tt>0&&s1[i]!=s1[tt+1])
 	{
 		tt=next[tt];
 	}
 	if(s1[tt+1]==s1[i])
 	{
 		tt++;
 	}
 	next[i]=tt;
 }
}
int main()
{
 cin>>s2+1>>s1+1;
 int tt=1;
 int l1=strlen(s1+1);
 int l2=strlen(s2+1);
 kmp(l1);
 for(int i=1;i<=l2;i++)
 {
 	while(tt>0&&(tt==l1||s2[i]!=s1[tt+1]))
 	{
 		tt=next[tt];
 	}
 	if(s1[tt+1]==s2[i])
 	{
 		tt++;
 	}
 	if(tt==l1)
 	{
 		printf("%d\n",i-l1+1);
 	}
 }
 for(int i=1;i<=l1;i++)
 {
 	printf("%d ",next[i]);
 }
 return 0;
}
2024/4/4 20:29
加载中...