POJ 2752 同一个串的前后串

来源:互联网 发布:ubuntu安装完进不去 编辑:程序博客网 时间:2024/06/13 14:02
题解东北赛回来再补
#include<stdio.h>#include<string.h>int next[500000];int ans[500000];char str[500000];void get_next(int m){   int j ,k;   j = 0 ,k = -1;   next[0] = -1;   while(j < m)   {       if(k == -1 || str[k] == str[j])       next[++j] = ++k;       else k = next[k];   }}int main (){    while(~scanf("%s" ,str))    {        int m = strlen(str);        get_next(m);        int an = 0;        ans[++an] = m;        while(next[ans[an]])        {           int tmp = next[ans[an]];           ans[++an] = tmp;        }        for(int i = an ;i >= 1 ;i --)        if(i == an) printf("%d" ,ans[i]);        else printf(" %d" ,ans[i]);        printf("\n");     }     return 0;}

0 0
原创粉丝点击