kuangbin KMP H题
来源:互联网 发布:旺旺怎么联系淘宝客服 编辑:程序博客网 时间:2024/06/13 12:22
H - Seek the Name, Seek the Fame
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数组的妙用。
仔细观察。
最小的前后缀一定在比他长的前后缀中出现过。
我们可以利用这一性质,[0,next[i]]出现过一定在[0,i]出现过。
141ms
代码:
#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <vector>using namespace std;const int MAXN = 400000 + 10;char str[MAXN];int len;int nt[MAXN];void getNext(){ nt[0] = -1; int i = 0, j = -1; while (i <= len) { if (j == -1 || str[i] == str[j]) { nt[++i] = ++j; } else { j = nt[j]; } }}vector<int> ans;int main(){ while(scanf("%s",str)!=EOF) { len = strlen(str); getNext(); while(len>0) { ans.push_back(len); len=nt[len]; } int siz = ans.size(); for(int i=siz-1;i>=1;i--) { printf("%d ",ans[i]); } printf("%d\n",ans[0]); ans.clear(); } return 0;}
- kuangbin KMP H题
- kuangbin kmp B题
- kuangbin KMP D题
- kuangbin KMP G题
- kuangbin KMP E题
- kuangbin 简单搜索 H题
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher H POJ 2752
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher(1) A-H
- kuangbin kmp专题中的字符串暴力
- hdu 1711 kuangbin 字符串 A KMP入门
- kuangbin 最短路 H题(如何将看似拓扑的问题转化成floyd )
- [kuangbin带你飞]专题十六 KMP & 扩展KMP
- kuangbin 数论 A题
- kuangbin 数论 E题
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J (kmp扩展)
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher K (kmp扩展)
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher L(kmp扩展)
- [kuangbin带你飞]专题一 简单搜索 - H - Pots
- java继承初始化随笔
- HDU 1532 Drainage Ditches(最大流)
- book1 unit5 after-class reading 2 : Ready for Danger
- priority_queue用法详解
- javalesuo解析
- kuangbin KMP H题
- 工厂模式(二)-工厂方法模式(C++实现)
- arcpy之计算要素长度及面积
- 0913 Oracle 查询
- 面向对象编程
- Html和CSS的关系
- 第二周项目三体验复杂度
- BOOS 机器人智能回复 智能聊天 朋友圈 加粉 采集ID
- android studio环境安装过程