poj 2752

来源:互联网 发布:mac windows支持软件 编辑:程序博客网 时间:2024/06/04 01:32
点击打开链接#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 4*1e5;char T[maxn];int  m;int d[maxn];void getNext(int next[]){        int i=0, j=next[0]=-1;        //i为后缀,j为前缀        while(i<m)        {            if (j==-1||T[i]==T[j])            {                ++i;                ++j;                next[i]=j;            }            else j=next[j];        }}int main(){          while(scanf("%s",T)!=EOF)          {              int next[maxn];              m=strlen(T);              getNext(next);            //得到next数组              int k=0;              for(int i=m;next[i]!=-1;i=next[i])                  d[k++]=i;              printf("%d",d[k-1]);              for(int i=k-2;i>=0;i--)                   printf(" %d",d[i]);              printf("\n");          }}

原创粉丝点击