标签:rest input kmp write ref tin lock man res
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 17898 | Accepted: 9197 |
Description
Input
Output
Sample Input
ababcababababcabab aaaaa
Sample Output
2 4 9 18 1 2 3 4 5
Source
若将i的父结点设为f[i],那么会形成一棵树。
对于i的祖先j,一定满足S[1,j]=S[i-j+1,i]。并且满足S[1,j]=S[i-j+1,i]的j,一定是i的祖先。
本题求的就是S的所有祖先的长度。
也就是说,它的失配函数的相同前后缀一定也是它的相同前后缀(相同前后缀的相同前后缀)
注意|S|一定成立
又犯了数组大小的沙茶错误
// // main.cpp // poj3461 // // Created by Candy on 10/19/16. // Copyright ? 2016 Candy. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N=4e5+5; int f[N],n; char s[N]; void getFail(){ f[1]=0; for(int i=2;i<=n;i++){ int j=f[i-1]; while(j&&s[i]!=s[j+1]) j=f[j]; f[i]=s[i]==s[j+1]?j+1:0; } } int ans[N],m=0; void sol(){ m=0; getFail(); int j=f[n]; while(j){ans[++m]=j;j=f[j];} for(int i=m;i>=1;i--) printf("%d ",ans[i]); printf("%d\n",n); } int main(){ //freopen("in.txt","r",stdin); while(scanf("%s",s+1)!=EOF){ n=strlen(s+1); sol(); } return 0; }
POJ 2752 Seek the Name, Seek the Fame [kmp]
标签:rest input kmp write ref tin lock man res
原文地址:http://www.cnblogs.com/candy99/p/6219056.html