poj 2752 Seek the Name, Seek the Fame【kmp】
2016-03-09 21:23
267 查看
Seek the Name, Seek the Fame
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
Sample Output
题目大意:给你一个字符串,让你输出每个字符串 不同长度的 前缀 和 后缀 匹配时候的前缀长度。
解析:直接用next数组怼就可以了,
Accept代码【c++】【前期版本】【157MS】
【后期版本】【469MS】
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
题目大意:给你一个字符串,让你输出每个字符串 不同长度的 前缀 和 后缀 匹配时候的前缀长度。
解析:直接用next数组怼就可以了,
Accept代码【c++】【前期版本】【157MS】
#include <cstdio> #include <cstring> using namespace std; #define M 400004 char str[M]; int len, n; int p[M], a[M]; void getp() { int i = 0, j = -1; p[0] = -1; while(i != len) { if(j == -1 || str[i] == str[j]) p[++i] = ++j; else j = p[j]; } } int main() { while(scanf("%s", str) != EOF) { len = strlen(str); getp(); memset(a, -1, sizeof(a)); int i = 0, j = 0; while(len != -1) { a[i++] = p[len]; n = i; len = p[len]; if(a[i] == 0) break; } for(j = n - 3; j >= 0; j--) printf("%d ", a[j]); printf("%d\n", strlen(str)); } return 0; }
【后期版本】【469MS】
#include <cstdio> #include <cstring> #include <stack> using namespace std; int len; int p[400001]; char str[400001]; void getp(int len) { int i = 0, j = -1; p[0] = -1; while(i != len) { if(j == -1 || str[i] == str[j]) p[++i] = ++j; else j = p[j]; } } int main() { while(~scanf("%s", str)) { int len; len = strlen(str); getp(len); stack <int > S; while(!S.empty()) S.pop(); while(p[len]) { S.push(p[len]); len = p[len]; } while(!S.empty()) { printf("%d ", S.top()); S.pop(); } printf("%d", strlen(str)); printf("\n"); } return 0; }
相关文章推荐
- Android -- Looper.prepare()和Looper.loop() —深入版
- Eclipse中自动import包
- 一个数组实现两个栈
- 探索推荐引擎内部的秘密,第 1 部分: 推荐引擎初探
- 对JS原型的一些理解
- qwidget 类阅读
- 目标特征检测之BRIEF描述符
- Java反射的学习
- Java 入门 之 抽象类
- 公共字串计算
- CodeForces 630F-Selection of Personnel【组合数学】
- HTML+CSS基础篇(三)——CSS样式基础
- 56.银行里的迷宫(未解决题目)
- 对于软件的点评
- 56.银行里的迷宫(未解决题目)
- 56.银行里的迷宫(未解决题目)
- 56.银行里的迷宫(未解决题目)
- CODE[VS] 1169 传纸条
- 判断一个单链表是否有环及环的链接点
- VMWare中安装Windows Server2012无法启动的解决方案