poj1961 Period (KMP)
来源:互联网 发布:最新金山画王软件 编辑:程序博客网 时间:2024/05/21 10:28
http://poj.org/problem?id=1961
Period
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
#include<iostream>#include<stdio.h>#include<string.h>using namespace std;const int maxn=1000009;int next[maxn],n;char s[maxn];void getnext(){ int i=0,j=-1; next[0]=-1; while(i<n) { if(j==-1||s[i]==s[j]) next[++i]=++j; else j=next[j]; }}int main(){ int t,cas=1; while(scanf("%d",&n)&&n!=0) { scanf("%s",s); getnext(); printf("Test case #%d\n",cas++); for(int i=2;i<=n;i++) { if(next[i]!=0&&i%(i-next[i])==0) printf("%d %d\n",i,i/(i-next[i])); } printf("\n"); } return 0;}
- 【KMP】 poj1961 Period
- poj1961 Period----KMP
- poj1961 Period (KMP)
- KMP POJ1961 Period
- [POJ1961]Period(KMP)
- poj1961 Period(KMP)
- POJ1961 Period(KMP)
- poj1961 & hdu 1358 Period(KMP)
- poj1961 period KMP求循环节
- poj1961—Period(kmp周期性质)
- poj1961 Period
- poj1961 Period
- poj1961 Period
- poj1961 Period
- poj1961 Period
- POJ1961-Period
- [POJ1961] Period
- poj1961 period
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之二 直接插入排序的三种实现
- 白话经典算法系列之一 冒泡排序的三种实现
- 引用
- HDOJ 4396 —— 二维SPFA
- poj1961 Period (KMP)
- 从一道面试题分析Linux进程+IO缓冲区机制
- 对象和集合初始值设定项
- java 句子中得单词顺序倒过来
- lua结合cocosbuilder开发游戏-不再勾选js controller了
- hdu4758 Walk Through Squares AC自动机(trie图)DP
- CPPUNIT在vs2010实践的编译配置实践
- Esper学习之七:EPL语法(三)
- Linux内核的变频机制