4944:[POI 2006] OKR-Periods of Words

文件提交:无需freopen 内存限制:128 MB 时间限制:1.000 S
评测方式:普通裁判
金币值:
命题人:
提交:0 解决:0

题目描述

# [POI 2006] 字符串的 OKR-周期 ## 题目描述 字符串是由小写英文字母组成的有限序列。特别地,字符串可以是空序列,即长度为 0 的序列。我们用 $A=BC$ 表示字符串 $A$ 是由字符串 $B$ 和字符串 $C$ **按顺序拼接**(直接相连,无空格等分隔符)得到的。 若存在字符串 $B$,使得 $A=PB$,则称字符串 $P$ 是字符串 $A$ 的**前缀**。换句话说,字符串 $A$ 的前缀就是它的开头子串。 此外,如果 $P \neq A$ 且 $P$ 不是空字符串,我们称 $P$ 是 $A$ 的**真前缀**。 若字符串 $Q$ 是 $A$ 的**真前缀**,且 $A$ 是字符串 $QQ$ 的**前缀**(不必是真前缀),则称 $Q$ 是 $A$ 的**周期**。 例如:字符串 $\texttt{abab}$ 和 $\texttt{ababab}$ 都是字符串 $\texttt{abababa}$ 的周期。 字符串 $A$ 的**最大周期**是它所有周期中最长的那个;如果 $A$ 没有任何周期,则最大周期为空字符串。 例如:$\texttt{ababab}$ 的最大周期是 $\texttt{abab}$;$\texttt{abc}$ 的最大周期是空字符串。 ### 任务 编写程序完成以下要求: 1. 从标准输入读取字符串长度和字符串本身; 2. 计算该字符串**所有前缀**的最大周期的**长度之和**; 3. 将结果输出到标准输出。 ## 输入格式 第一行输入一个整数 $k$($1\le k\le 1\ 000\ 000$),表示字符串的长度。 第二行输入一个长度恰好为 $k$ 的小写英文字符串。 ## 输出格式 仅输出一行一个整数,表示输入字符串所有前缀的最大周期的长度之和。 ## 输入样例 ``` 8 babababa ``` ## 输出样例 ``` 24 ``` ## 提示 (暂无提示) 标签:P3435|字符串|2006|POI(波兰)|KMP 算法 ## 来源 P3435|[POI 2006] OKR-Periods of Words