【poj2752】Seek the Name, Seek the Fame(KMP)

来源:互联网 发布:淘宝近视眼镜店 编辑:程序博客网 时间:2024/05/27 20:47

题目描述

传送门

题解

从后往前不断地找失配即可。

代码

#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int max_w=400005;char W[max_w];int len,T[max_w],ans[max_w],tot;inline void calc_T(){    T[0]=-1;    int j;    for (int i=0;i<len;++i){        j=T[i];        while (j!=-1&&W[i]!=W[j])          j=T[j];        T[i+1]=++j;    }}inline void calc_ans(){    int j=len;    while (j!=-1){        ans[++tot]=j;        j=T[j];    }}int main(){    while (gets(W)){        memset(T,0,sizeof(T));        len=strlen(W);        calc_T();        memset(ans,0,sizeof(ans));        tot=0;        calc_ans();        for (int i=tot-1;i>=1;--i)          printf("%d%c",ans[i]," \n"[i==1]);    }}
0 0
原创粉丝点击