POJ 2752 Seek the Name, Seek the Fame(KMP next数组运用)
2015-08-07 17:34
274 查看
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
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 14128 | Accepted: 7031 |
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数组的另一种用法 ac代码:
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #define MAXN 400010 using namespace std; int len; char s[MAXN]; int next[MAXN]; int a[MAXN]; void make() { int i=0; int j=-1; next[i]=j; while(i<len) { if(j==-1||s[i]==s[j]) { i++; j++; next[i]=j; } else j=next[j]; } } int main() { int i,k,j,n; while(scanf("%s",s)!=EOF) { len=strlen(s); make(); i=len; n=0; while(next[i]!=-1) { a[n++]=i; i=next[i]; } for(i=n-1;i>0;i--) printf("%d ",a[i]); printf("%d\n",len); } return 0; }
相关文章推荐
- java中什么是bridge method(桥接方法)
- 快速布局ansible内网环境
- 最少砝码问题(用一部分数的和/差表示区间上所有的整数)
- 起底移动理财产品模式,看移动理财的风险与救赎
- HDUOJ A+Bproble 题目1089 1090 1091 1092 1093 1094 1095 1096
- 关于HTML+css 的一些学习笔记
- 企业资源计划软件 业务知识点汇编整理
- Linux重定向的学习
- 欢迎使用CSDN-markdown编辑器
- HDOJ Oulipo (基础KMP)
- 非常好的理解遗传算法的例子
- linux权限-r-w-代表意思
- hdu5358
- POI操作Excel异常Cannot get a text value from a numeric cell
- sublime3破解版sublime3注册码
- OC学习----设计模式
- vector
- 互联网+时代的智能驾驶
- HDU1686Oulipo(KMP)
- [转]Eclipse下打开文件所在的目录