标签:
题目大意:小猫是非常有名气的,所以很多父母都来找它给孩子取名字,因为找的人比较多,小猫为了摆脱这个无聊的工作,于是它发明了一种取名字的办法,它把孩子父母的名字合在一起,然后从这个名字里面找一个前缀,并且这个前缀也得是后缀,然后用它当孩子的名字,比如父亲的名字是:ala,母亲的名字是la, 那么孩子的名字就可以是“a”,“ala”,“alala”, 现在想知道孩子的名字可以多长?
#include<stdio.h> #include<string.h> const int MAXN = 1e6+7; const int oo = 1e9+7; char s[MAXN]; int next[MAXN], ans[MAXN]; void GetNext(int N) { int i=0, j=-1; next[0] = -1; while(i < N) { if(j==-1 || s[i]==s[j]) next[++i] = ++j; else j = next[j]; } } int main() { while(scanf("%s", s) != EOF) { int N = strlen(s), k=0; GetNext(N); ans[k++] = N; while(next[N] != 0) { ans[k++] = next[N]; N = next[N]; } for(int i=k-1; i>=0; i--) { printf("%d%c", ans[i], i ?‘ ‘:‘\n‘); } } return 0; }
Seek the Name, Seek the Fame - POJ 2752(next运用)
标签:
原文地址:http://www.cnblogs.com/liuxin13/p/4730987.html