KMP 函数 WA 放主函数 AC ??? 求大佬帮忙

P3375 【模板】KMP

#include<bits/stdc++.h> using namespace std; char s1[1000000],s2[1000000]; int nxt[110000],l1,l2,ans; void prework() { nxt[0]=nxt[1]=0; for(int i=2,j=0;i<=l2;i++) { while(j && s2[i]!=s2[j+1])j=nxt[j]; if(s2[i]==s2[j+1])j++; nxt[i]=j; } } void kmp() { for(int i=1,j=0;i<=l1;i++) { while(j && s1[i]!=s2[j+1])j=nxt[j]; if(s1[i]==s2[j+1])j++; if(j==l2) { printf("%d\n",i-l2+1); j=nxt[j]; } } } int main() { scanf("%s%s",s1+1,s2+1); l1=strlen(s1+1); l2=strlen(s2+1); prework(); kmp(); for(int i=1;i<=l2;i++) { printf("%d ",nxt[i]); } return 0; } `````c #include<bits/stdc++.h> using namespace std; char s1[1000000],s2[1000000]; int nxt[110000],l1,l2,ans; void prework() { nxt[0]=nxt[1]=0; for(int i=2,j=0;i<=l2;i++) { while(j && s2[i]!=s2[j+1])j=nxt[j]; if(s2[i]==s2[j+1])j++; nxt[i]=j; } } void kmp() { for(int i=1,j=0;i<=l1;i++) { while(j && s1[i]!=s2[j+1])j=nxt[j]; if(s1[i]==s2[j+1])j++; if(j==l2) { printf("%d\n",i-l2+1); j=nxt[j]; } } } int main() { scanf("%s%s",s1+1,s2+1); l1=strlen(s1+1); l2=strlen(s2+1); prework(); kmp(); for(int i=1;i<=l2;i++) { printf("%d ",nxt[i]); } return 0; } ````c ``` ------------
by Lucifer1115 @ 2018-08-05 19:40:08


```cpp #include<bits/stdc++.h> using namespace std; char s1[1000000],s2[1000000]; int nxt[110000],l1,l2,ans; void prework() { nxt[0]=nxt[1]=0; for(int i=2,j=0;i<=l2;i++) { while(j && s2[i]!=s2[j+1])j=nxt[j]; if(s2[i]==s2[j+1])j++; nxt[i]=j; } } void kmp() { for(int i=1,j=0;i<=l1;i++) { while(j && s1[i]!=s2[j+1])j=nxt[j]; if(s1[i]==s2[j+1])j++; if(j==l2) { printf("%d\n",i-l2+1); j=nxt[j]; } } } int main() { scanf("%s%s",s1+1,s2+1); l1=strlen(s1+1); l2=strlen(s2+1); prework(); kmp(); for(int i=1;i<=l2;i++) { printf("%d ",nxt[i]); } return 0; } ```
by Lucifer1115 @ 2018-08-05 19:41:22


> 希望更丰富的展现?使用Markdown 好像不同位置的最大内存空间是不一样的(也许是这个原因吧)
by 哔哩哔哩 @ 2018-08-05 19:42:04


上面这个会WA Too many or too few lines
by Lucifer1115 @ 2018-08-05 19:42:21


@[Lucifer1115](/space/show?uid=59357) 你不妨把s1s2开大点试试?
by Styx @ 2018-08-05 19:42:50


```cpp #include<bits/stdc++.h> using namespace std; char s1[1100000],s2[1100000]; int nxt[1100000],l1,l2,ans; int main() { scanf("%s%s",s1+1,s2+1); l1=strlen(s1+1); l2=strlen(s2+1); for(int i=2,j=0;i<=l2;i++) { while(j && s2[i]!=s2[j+1])j=nxt[j]; if(s2[i]==s2[j+1])j++; nxt[i]=j; } for(int i=1,j=0;i<=l1;i++) { while(j && s1[i]!=s2[j+1])j=nxt[j]; if(s1[i]==s2[j+1])j++; if(j==l2) { printf("%d\n",i-l2+1); j=nxt[j]; } } for(int i=1;i<=l2;i++) { printf("%d ",nxt[i]); } return 0; } ```
by Lucifer1115 @ 2018-08-05 19:43:08


然后复制粘贴函数里面的 到主函数 就AC 了
by Lucifer1115 @ 2018-08-05 19:43:46


@[Styx](/space/show?uid=48740) 一百万了诶
by Lucifer1115 @ 2018-08-05 19:44:40


@[fsy2017](/space/show?uid=41868) 那下面的那个呢 就是换了一个位置,copy&paste 谢谢
by Lucifer1115 @ 2018-08-05 19:46:00


@[fsy2017](/space/show?uid=41868) 写完发现语气怪怪的,应该是 “谢谢你” 哈哈
by Lucifer1115 @ 2018-08-05 19:49:29


| 下一页