POJ 2752
2016-04-07 12:52
218 查看
http://poj.org/problem?id=2752
Seek the Name, Seek the Fame
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 15797 Accepted: 8020
Description
The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the little cat to give names to their newly-born babies. They seek the name, and at the same time seek the fame. In order to escape from such boring job, the innovative 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
The input contains a number of test cases. Each test case occupies a single line that contains the string S described above.
Restrictions: Only lowercase letters may appear in the input. 1 <= Length of S <= 400000.
Output
For each test case, output a single line with integer numbers in increasing order, denoting the possible length of the new baby’s name.
Sample Input
ababcababababcabab
aaaaa
Sample Output
2 4 9 18
1 2 3 4 5
这个是考察对于Kmp中next 数组的理解情况的。
大致的题意就是给你个字符串,问他有多少个前缀子串和后缀子串相等,把相等的个数输出。
代码:
Seek the Name, Seek the Fame
Time Limit: 2000MS Memory Limit: 65536K
Total Submissions: 15797 Accepted: 8020
Description
The little cat is so famous, that many couples tramp over hill and dale to Byteland, and asked the little cat to give names to their newly-born babies. They seek the name, and at the same time seek the fame. In order to escape from such boring job, the innovative 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
The input contains a number of test cases. Each test case occupies a single line that contains the string S described above.
Restrictions: Only lowercase letters may appear in the input. 1 <= Length of S <= 400000.
Output
For each test case, output a single line with integer numbers in increasing order, denoting the possible length of the new baby’s name.
Sample Input
ababcababababcabab
aaaaa
Sample Output
2 4 9 18
1 2 3 4 5
这个是考察对于Kmp中next 数组的理解情况的。
大致的题意就是给你个字符串,问他有多少个前缀子串和后缀子串相等,把相等的个数输出。
代码:
#include <stdio.h> #include <iostream> #include <string.h> #include <algorithm> #define N 1000005 using namespace std; char s ; int nexts ,tmp ; void get_nexts(char s[],int nexts[]) { int i=0,k=-1,len=strlen(s); nexts[0]=-1; while(i<len) { if(k==-1||s[i]==s[k]) { i++,k++; nexts[i]=k; } else k=nexts[k]; } } int main() { while(~scanf("%s",s)) { get_nexts(s,nexts); int len=strlen(s),i=0; while(nexts[len]) //这个是非常神奇的代码,nexts[len]表明了整个字符串中最大的前缀后缀子串相等的个数是多少。 { tmp[i++]=nexts[len]; len=nexts[len]; //一级一级的扫,整个字符串开始一直扫到没有为止。 } if(nexts[0]==nexts[len]) printf("1 "); for(int j=i-1;j>=0;j--) { printf("%d ",tmp[j]); } printf("%d\n",strlen(s)); //这个有点奇怪的判断,因为前缀子串是不包含整个字符串的,后缀也是不包含的。应该是题的原因。。。。可能我读题不仔细,没有看清类似的注意事项! } return 0; }
相关文章推荐
- KMP算法的C#实现方法
- JavaScript中数据结构与算法(五):经典KMP算法
- 字符串算法--KMP--Java实现
- 初学ACM - 组合数学基础题目PKU 1833
- KMP算法(转载)
- kmp算法实现
- POJ ACM 1001
- POJ ACM 1002
- 1611:The Suspects
- POJ1089 区间合并
- KMP算法详解
- linux kernel data struct: KMP算法实现
- POJ 2635 The Embarrassed Cryptographe
- POJ 3292 Semi-prime H-numbers
- POJ 2773 HAPPY 2006
- POJ 3090 Visible Lattice Points
- POJ-2409-Let it Bead&&NYOJ-280-LK的项链
- POJ-1695-Magazine Delivery-dp
- POJ1523 SPF dfs
- POJ-1001 求高精度幂-大数乘法系列