[算法竞赛进阶指南]Period
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Description
[poj1961]
一个字符串的前缀是从第一个字符开始的连续若干个字符,例如”abaab”共有5个前缀,分别是a, ab, aba, abaa, abaab。
我们希望知道一个N位字符串S的前缀是否具有循环节。
换言之,对于每一个从头开始的长度为 i (i>1)的前缀,是否由重复出现的子串A组成,即 AAA…A (A重复出现K次,K>1)。
如果存在,请找出最短的循环节对应的K值(也就是这个前缀串的所有可能重复节中,最大的K值)。
Input Format
输入包括多组测试数据,每组测试数据包括两行。
第一行输入字符串S的长度N, 2 ≤ N ≤ 1000000。
第二行输入字符串S。
输入数据以只包括一个0的行作为结尾。
Output Format
对于每组测试数据,第一行输出 “Test case #” 和测试数据的编号。
接下来的每一行,输出具有循环节的前缀的长度i和其对应K,中间用一个空格隔开。
前缀长度需要升序排列。在每组测试数据的最后输出一个空行。
3
aaa
4
abcd
12
aabaabaabaab
0
Test case #1
2 2
3 3
Test case #2
Test case #3
2 2
6 2
9 3
12 4
Source
KMP 串
NCST CCPC赛前训练2 单调栈/队列、堆、Hash、Huffman树、Trie、KMP
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 25
- 开始于
- 2019-4-12 21:40
- 结束于
- 2019-5-13 1:00
- 持续时间
- 723.3 小时
- 主持人
- 参赛人数
- 10