poj2752 seek the name,seek the fame
2016-05-12 23:16
363 查看
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.
利用kmp,next[next[i]]也一定i位置的前后缀匹配,以此类推。不停求next即可。
注意要求升序输出,所以可以用栈。
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.
利用kmp,next[next[i]]也一定i位置的前后缀匹配,以此类推。不停求next即可。
注意要求升序输出,所以可以用栈。
#include<cstdio> #include<cstring> char s[400010]; int next[400010],sta[400010]; int main() { int i,j,k,l,m,n,p,q,x,y,z,top; char c; while (scanf("%s",s+1)==1) { memset(sta,0,sizeof(sta)); l=strlen(s+1); for (i=1;i<=l;i++) for (i=2,j=0;i<=l;i++) { while (j>0&&s[j+1]!=s[i]) j=next[j]; if (s[j+1]==s[i]) j++; next[i]=j; } top=0; for (i=l;i;i=next[i]) sta[++top]=i; while (top>1) printf("%d ",sta[top--]); printf("%d\n",sta[1]); } }
相关文章推荐
- JPA规范介绍及实例(Java数据持久化解决方案)
- 笔试面试题6--递归思想
- bootstrap深入理解之格子布局
- iOS基础开发-自定义控件
- Android 实现拍照功能
- 《TCP/IP详解》学习笔记-第17/18章 TCP:概述、连接建立与终止
- Java for-each循环
- jQuery 工具函数
- kali安装火狐浏览器
- Path类的一些方法
- [CareerCup] 18.12 Largest Sum Submatrix 和最大的子矩阵
- kali更新源
- java中带继承类的加载顺序详解及实战
- kmk
- Nginx反向代理端口问题
- spring基础知识汇总及常见面试题目总结
- iOS开发-----KVC与KVO的区别
- What Every CLR Developer Must Know Before Writing Code
- Bill Joy - not only the author of VI
- android ScrollView触摸点源码解读