博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Poj2752--Seek the Name, Seek the Fame(Kmp → → Next数组应用)
阅读量:6523 次
发布时间:2019-06-24

本文共 2365 字,大约阅读时间需要 7 分钟。

Seek the Name, Seek the Fame
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 14172   Accepted: 7055

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

ababcababababcababaaaaa

Sample Output

2 4 9 181 2 3 4 5

Source

,Zeyuan Zhu
RE:在一个字符串中寻找子串(既是前缀、 也是后缀),从小到大输出子串长度;
1 #include 
2 #include
3 #include
4 using namespace std; 5 char a[400040]; int p[400040], lena, num[400040]; 6 void Getp() 7 { 8 int i = 0, j = -1; 9 p[i] = j;10 while(i < lena)11 {12 //printf("1\n");13 if(j==-1 || a[i] == a[j])14 {15 i++; j++;16 p[i] = j;17 } 18 19 else20 j = p[j];21 } 22 } 23 int main()24 {25 while(~scanf("%s", a))26 {27 lena = strlen(a);28 Getp();29 int i, k = 0;30 for(i = lena; i != 0;)31 {32 num[k++] = p[i];33 i = p[i];34 }35 /* printf("%d\n", p[lena]);*/36 for(i = k-2; i >= 0; i--)37 printf("%d ", num[i]); 38 printf("%d\n", lena); 39 } 40 return 0; 41 }

 

 

转载于:https://www.cnblogs.com/soTired/p/4713215.html

你可能感兴趣的文章
一次expdp 错误的分析处理
查看>>
Exchange 2010 DAG local and Site DR/Failover and Fail back
查看>>
LigerUI - 树表格的数据来自Server
查看>>
Windows下打印服务器的管理(二)
查看>>
新浪微博数据爬取
查看>>
完全用Deepin Linux娱乐、工作、学习(2)-- 显卡驱动篇
查看>>
正则表达式入门教程-连载(6)- 字符边界
查看>>
AIP(Azure 信息保护)之五:添加水印与页眉页脚
查看>>
认证技术概述
查看>>
制作Windows Server 2003/08 image详细步骤与OpenStack介绍
查看>>
2016国赛小结
查看>>
Android Studio 第六十四期 - Android业务组件化之URL Scheme使用
查看>>
Hyper-V 2016 系列教程41 Windows 10 Hyper-V 系统要求
查看>>
EC2 WordPress 移动目录
查看>>
Windows Server 2008 启用公共文件夹共享
查看>>
db2建库流程
查看>>
【运维故事】职场如何领先一步?
查看>>
如何提高SEO优化团队效率
查看>>
做业务与技术之间的桥梁
查看>>
指纹识别,刚需or装逼
查看>>