点击打开题目
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 12651 | Accepted: 6214 |
Description
little cat works out an easy but fantastic algorithm:
Step1. Connect the father’s name and the mother’s name, to a new string S.
Step2. Find a proper prefix-suffix string of S (which is not only the prefix, but also the suffix of S).
Example: Father=’ala’, Mother=’la’, we have S = ‘ala’+’la’ = ‘alala’. Potential prefix-suffix strings of S are {‘a’, ‘ala’, ‘alala’}. Given the string S, could you help the little cat to write a program to calculate the length of possible prefix-suffix strings
of S? (He might thank you by giving your baby a name:)
Input
Restrictions: Only lowercase letters may appear in the input. 1 <= Length of S <= 400000.
Output
Sample Input
aaaaa
Sample Output
1 2 3 4 5
给出1个字符串str,求出str中存在多少子串,使得这些子串既是str的前缀,又是str的后缀。从小到大顺次输出这些子串的长度
#include<cstdio> #define maxn 400002 char str[maxn]; int next[maxn],len,s; void GetNext(){ int i=0,j=⑴; next[0]=⑴; while(str[i]){ if(j==⑴||str[i]==str[j]){ ++i;++j;next[i]=j; }else j=next[j]; } len=i; } void GetVal(int n){ if(next[n]==0) return ; GetVal(next[n]); printf("%d ",next[n]); } int main(){ while(scanf("%s",str)==1){ GetNext(); GetVal(len); printf("%d ",len); }return 0; }
波比源码 » poj 2752 Seek the Name, Seek the Fame【KMP】