poj 2752

题意:给你一个串,如果这个串存在一个长度为n的前缀串,和长度为n的后缀串,并且这两个串相等,则输出他们的长度n。求出所有的长度n。

 

代码:

#include<iostream>
#include<fstream>

using namespace std;

char c[400003];
int next[400004];
int len;

void getnext(){
    int i,j,k;
    j=0;k=-1;
    next[0]=-1;
    while(j<len)
    {
        if(k==-1||c[j]==c[k])
            next[++j]=++k;
        else
            k=next[k];
    }
}

void solve(int s){
    if(s!=0)
    {
        solve(next[s]);
        cout<<s<<' ';
    }
}

void read(){
//    ifstream cin("in.txt");
    int i,j,k;
    while(cin>>c)
    {
       
        len=strlen(c);
        getnext();
        solve(next[len]);
        cout<<len<<endl;
    }
}

int main(){
    read();
    return 0;
}

posted on 2011-05-19 16:39  宇宙吾心  阅读(312)  评论(0)    收藏  举报

导航