HDU 1358 Period(KMP+求某个前缀含几个循环)
来源:互联网 发布:济南js复合保温模板 编辑:程序博客网 时间:2024/06/05 19:44
Period
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7903 Accepted Submission(s): 3794
Problem Description
For each prefix of a given string S with N characters (each character has an ASCII code between 97 and 126, inclusive), we want to know whether the prefix is a periodic string. That is, for each i (2 <= i <= N) we want to know the largest K > 1 (if there is one) such that the prefix of S with length i can be written as AK , that is A concatenated K times, for some string A. Of course, we also want to know the period K.
Input
The input file consists of several test cases. Each test case consists of two lines. The first one contains N (2 <= N <= 1 000 000) – the size of the string S. The second line contains the string S. The input file ends with a line, having the number zero on it.
Output
For each test case, output “Test case #” and the consecutive test case number on a single line; then, for each prefix with length i that has a period K > 1, output the prefix size i and the period K separated by a single space; the prefix sizes must be in increasing order. Print a blank line after each test case.
Sample Input
3aaa12aabaabaabaab0
Sample Output
Test case #12 23 3Test case #22 26 29 312 4
Recommend
JGShining | We have carefully selected several similar problems for you: 1686 3068 2203 2087 1277
#include<stdio.h>#include<cstring>char b[1000001];int p[1000001];int m;void get(){p[1] = 0;int i,j=0;for(i=2;i<=m;i++){while(j > 0 && b[j+1] != b[i]){j = p[j];}if(b[j+1] == b[i]){j += 1; }p[i] = j;} } int main() { int cases = 1; while(scanf("%d",&m),m) { scanf("%s",b+1); printf("Test case #%d\n",cases++); get(); for(int i = 2; i <= m; i++) { if(i%(i-p[i])==0&&p[i]!=0) //i个前缀含几个循环 { printf("%d %d\n",i,i/(i-p[i])); } } puts(""); } }
0 0
- HDU 1358 Period(KMP+求某个前缀含几个循环)
- hdu 1358 kmp 求前缀有几个循环
- hdu 1358 period 求循环节 KMP
- HDU-1358 Period(KMP求循环节)
- HDU 1358 Period(KMP求前缀子串的循环次数)
- HDU 1358 Period (kmp求循环节)
- KMP + 求最小循环节 --- HDU 1358 Period
- hdu 1358 Period(KMP循环)
- UVALive 3026 Period ( kmp 求前缀最小循环节)
- 【 poj 1961 】Period 【KMP 求所有前缀的循环节】
- HDU 1358 Period 求前缀长度和最小循环节长度
- [KMP-循环节问题]HDU 1358 period
- hdu 1358 Period(KMP 循环节)
- HDU 1358 Period(kmp循环节)
- hdu 1358 Period(KMP循环节)
- HDU 1358 Period [KMP+循环节]
- hdu 1358 Period【KMP字符串循环】
- HDU 1358 Period(KMP求周期)
- gsm-modem-cms-error-code-list
- POJ
- MIT的《深度学习》精读(23)
- Android中webview与js交互
- COGS 14. [网络流24题] 搭配飞行员
- HDU 1358 Period(KMP+求某个前缀含几个循环)
- ORACLE获取字符串中数字部分
- 第八天2017/04/17(3、C++的几个语法)
- 多态实现线性表(队列、串、堆栈)
- ASCII对照表
- 06-软件测试计划及测试说明
- 精通Jquery,Jquery入门准备(0)
- html+js 简单静态网页设计
- C++ STL基本容器的使用