社区讨论

KMP模板数据极其水啊......

P3375【模板】KMP参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi7d2jpz
此快照首次捕获于
2025/11/20 19:41
4 个月前
此快照最后确认于
2025/11/20 19:41
4 个月前
查看原帖
同一个机房的有个同学觉得这题用find()能过。。。。。。在我们极力劝阻无果的情况下帮他打了getnext,然后AC了?!代码如下
CPP
#include <iostream>
#include <cstring>
using namespace std;
int next[2000000],sl,sll,k;
bool h[2000000];
string s,s1;
void getnext(){
    next[0]=-1;int j=-1;
    for(int i=1;i<sl;i++){
        while(j!=-1&&s[j+1]!=s[i]) j=next[j];
        if(s[j+1]==s[i]) j++;
        next[i]=j;
    }
    return;
}
int main(){
    cin>>s1>>s;
    sll=s1.length();
    for(int i=0;i<sll;++i){
        if(s1[i]==s[0]){
            k=s1.find(s,i);
            if(!h[k+1]){
                h[k+1]=1;
                if(k!=-1)
            	cout<<k+1<<endl;
            }
        }
    }
    sl=s.length();
    getnext();
    for(int i=0;i<sl;i++) cout<<next[i]+1<<" ";
    return 0;
} 

回复

4 条回复,欢迎继续交流。

正在加载回复...