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

本文共 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

你可能感兴趣的文章
在java中使用solr7.2.0 新旧版本创建SolrClient对比
查看>>
网络监控nagios小结
查看>>
详细介绍Linux shell脚本基础学习
查看>>
Heka配置讲解
查看>>
(页面滑动)ionic2-super-tabs插件的使用及注意地方
查看>>
error while loading shared libraries: libmysqlclient.so.15
查看>>
linux上项目报错找不到主机名解决办法
查看>>
分享Android软件:智慧旅行做法
查看>>
linux服务器沦陷为它人发送短信的工具
查看>>
ubuntu如何设置开机启动进入命令行界面
查看>>
windows7系统下文件共享 详细图解教程
查看>>
Java笔试题解(7)
查看>>
SpringMVC使用hibrenate validation进行验证
查看>>
为什么System.out.println(super)不被允许?
查看>>
angular开发中常遇到的坑
查看>>
angularJS
查看>>
微软可穿戴设备新专利公布
查看>>
web应用安全的现状是怎样的
查看>>
QuikNode -Infura高配版
查看>>
JVM学习记录——类加载的过程
查看>>