题目链接:http://poj.org/problem?id=2752
问后缀等于前缀,并升序输出长度
边跳边输出就好啦
#include <stdio.h>
#include<cstring>
using namespace std;
char b[400010];
int nxt[400010];
int lb;
void gnx(){
nxt[0]=-1;
int i=0,j=-1;
while(i<lb){
if(j==-1||b[i]==b[j])nxt[++i]=++j;
else j=nxt[j];
}
}
void print(int d){
if(d==0){return;}
print(nxt[d]);
printf("%d ",d);
}
int main(void)
{
while(~scanf("%s",b)){
lb=strlen(b);
gnx();
print(nxt[lb]);
printf("%d\n",lb);
}
return 0;
}