POJ 2752 Seek the Name, Seek the Fame (KMP)
传送门 http://poj.org/problem?id=2752
题目大意:求既是前缀又是后缀的前缀的可能的长度。。
同样是KMP,和 HDU 2594 Simpsons’ Hidden Talents ( http://blog.csdn.net/murmured/article/details/12867995) 一样,只不过这题是全部输出而已。
故利用失配函数性质,一路next(好吧我的代码是f),最后倒序输出
#include<cstdio> #include<cstring> const int MAXN=400000+10; char P[MAXN]; int f[MAXN]; int n,m; int ans[MAXN]; void getFail() { int i,j; f[0]=f[1]=0; for(i=1;i<n;i++) { j=f[i]; while(j && P[i]!=P[j]) j=f[j]; if(P[i]==P[j]) j++; f[i+1]=j; } } int main() { while(scanf("%s",P)!=EOF) { n=strlen(P); getFail(); int len=0; int j=n; do { ans[len++]=j; j=f[j]; }while(j); for(int i=len-1;i>=1;i--) { printf("%d ",ans[i]); } printf("%d\n",ans[0]); } }
新 blog : www.hrwhisper.me