POJ Period 1691(kmp)
来源:互联网 发布:nginx 源码 编辑:程序博客网 时间:2024/05/16 03:37
Period
Time Limit: 3000MS Memory Limit: 30000KTotal Submissions: 16765 Accepted: 8069
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 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.
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
Source
Southeastern Europe 2004
题意:求每个点是否存在循环节,
分析:求出next[ ]数组,如果 i%(i-next[i])==0 && next[i]!=0则有循环节次数i/(i-next[i]) ,循环节长度i-next[i]
#include <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>using namespace std;#define maxx 1123456int next[maxx];char t[maxx];void get_next(char t[]){ int l=strlen(t); int i=0,j=-1; next[0]=-1; while(i<l) { if(j==-1 || t[i]==t[j]) { i++;j++;next[i]=j; } else { j=next[j]; } }}int main(){ int n,m,i,j; int ll=1; while(scanf("%d",&n)&&n) { scanf("%s",t); get_next(t); int l=n; printf("Test case #%d\n",ll++); for(i=2;i<=l;i++) { if(i%(i-next[i])==0 && next[i]!=0) printf("%d %d\n",i,i/(i-next[i])); } printf("\n"); } return 0;}
0 0
- POJ Period 1691(kmp)
- poj 1961:Period (KMP)
- poj 1961 Period (KMP)
- poj 1961 Period---kmp
- Poj 1960 Period//kmp
- POJ 1961-Period:KMP
- poj 1961 Period KMP
- poj 1961 Period(KMP)
- Period - POJ 1961 KMP
- POJ 1961 Period (KMP)
- POJ Period 1961【KMP】
- POJ 1961 Period kmp
- Poj 1916 Period KMP
- poj 1961 Period 【KMP】
- POJ-1961(Period)(kmp())
- [poj 1961]Period[kmp]
- POJ 1961 Period (KMP)
- POJ 1961 Period(KMP)
- 1、markdown编辑器
- 泛型
- 旋转数组二分查找法搜索
- 二叉树的层次遍历方法
- hdu 1027 Ignatius and the Princess II(STL全排列)
- POJ Period 1691(kmp)
- 2016年华东师范大学考研分数线汇总
- 了解 Nginx 基本概念
- teqc plot file介绍及可视化软件
- Level-order Traversal
- 采集,添加入库,展示生成静态页面
- python用 GET,POST,PUT,DELETE方式向HTTP提交数据
- WebService CXF学习(入门篇1):CXF由来
- HDU-1058-Humble Numbers(暴力打表)