1536. seek (Standard IO) Time Limits: 1000 ms Memory Limits: 65536 KB Detailed Limits Goto ProblemSet Description 俗话说“好命不如好名”,小h准备给他的宠物狗起个新的名字,于是他把一些英文的名字全抄下来了,写成一行长长的字符串,小h觉得一个名字如果是好名字,那么这个名字在这个串中既是前缀,又是后缀,即是这个名字从前面开始可以匹配,从后面开始也可以匹配,例如abc在 abcddabc中既是前缀,也是后缀,而ab就不是,可是长达4*10^5的字符让小h几乎昏过去了,为了给自己的小狗起个好名字,小h向你求救,并且他要求要将所有的好名字的长度都输出来。 Input 一行,要处理的字符串(都是小写字母)。 Output 一行若干个数字,从小到大输出,表示好名字的长度。 Sample Input abcddabc Sample Output 3 8 Data Constraint var a,b,c,ans:longint; s:ansistring; v,r:array[0..400000]of longint; begin //assign(input,'1.in');reset(input); readln(s); inc(ans); r[ans]:=length(s); for a:=2 to length(s)-1 do begin while (b>0)and(s[b+1]<>s[a]) do b:=v[b]; if s[b+1]=s[a] then begin v[a]:=b+1; inc(b); end; b:=v[a]; end; v[0]:=-1; while b>-1 do begin if s[b+1]=s[length(s)] then begin inc(ans); r[ans]:=b+1; end; b:=v[b]; end; for a:=ans downto 1 do begin write(r[a]); if a<>1 then write(' '); end; close(input); end.