#kMPybttg020204. 2.OKR-Periods of Words
2.OKR-Periods of Words
好的,这是整理好的题面,格式清晰。
题目描述
一个字符串可以由若干个小写字母组成,空序列也算一个串。
定义:
- 如果存在串 ( B ) 使得 ( A = P B ),则 ( P ) 是 ( A ) 的前缀。
- 如果 ( P \neq A ) 并且 ( P ) 不是空串,则称 ( P ) 是 ( A ) 的 proper 前缀。
- ( Q ) 是 ( A ) 的周期,当且仅当 ( Q ) 是 ( A ) 的 proper 前缀,并且 ( A ) 是 ( QQ )(两个 ( Q ) 拼接)的前缀(不一定要是 proper 前缀)。
例如:
- 对于串
"abababa","abab"是它的一个周期,因为"abab"是它的 proper 前缀,并且"abababa"是"abababab"的前缀。 "ababab"也是它的周期,因为"ababab"是它的 proper 前缀,并且"abababa"是"abababababab"的前缀(QQ="abababababab","abababa"是该串前缀)。
一个串 ( A ) 的最大周期就是它最长的一个周期,如果 ( A ) 没有周期,则最大周期为空串(长度为 0)。
例如:
"ababab"的最大周期是"abab"(长度 4)。"abc"的最大周期是空串(长度 0)。
任务:给出一个字符串,求出它所有前缀的最大周期长度之和。
输入格式
第一行一个整数 ( k )(( 1 < k < 10^6 )),表示字符串长度。
第二行一个长度为 ( k ) 的由小写字母组成的字符串。
输出格式
输出一个整数,表示该字符串所有前缀的最大周期长度之和。
数据范围
- ( 1 < k < 10^6 )
输入样例
8
babababa
输出样例
24
样例解释
字符串 "babababa" 的长度 ( k = 8 )。
我们需要计算每个前缀的最大周期长度:
- 前缀
"b":没有 proper 前缀(除了空串),所以最大周期长度 = 0。 - 前缀
"ba":proper 前缀"b","ba"不是"bb"的前缀,所以周期不存在,长度 = 0。 - 前缀
"bab":proper 前缀"b","ba"。检查"b":"bab"是"bb"的前缀吗?不是。检查"ba":"bab"是"baba"的前缀吗?是。所以周期"ba"长度 2。 - 前缀
"baba":proper 前缀"b","ba","bab"。"b":"baba"是"bb"的前缀?不是。"ba":"baba"是"baba"的前缀?是,并且"ba"是 proper 前缀,长度 2。"bab":"baba"是"babbab"的前缀?不是。
所以最大周期长度 = 2。
- 前缀
"babab":proper 前缀"b","ba","bab","baba"。
检查"baba":"babab"是"babababa"的前缀?是,长度 4。 - 前缀
"bababa":proper 前缀中"babab"长度 5,但"bababa"是"bababbabab"的前缀?不是。
检查"baba":"bababa"是"babababa"的前缀?是,长度 4。 - 前缀
"bababab":proper 前缀中"bababa"长度 6 不行(因为"bababab"不是"babababababa"的前缀)。
检查"babab":"bababab"是"bababbabab"的前缀?不是。
检查"baba":"bababab"是"babababa"的前缀?是,长度 4。 - 前缀
"babababa":proper 前缀中"bababab"不行,检查"bababa":"babababa"是"babababababa"的前缀?是,长度 6。
长度分别为:0, 0, 2, 2, 4, 4, 4, 6。
总和 = 0+0+2+2+4+4+4+6 = 24。
输出 24。
这样题目就完整了,包括题意、输入输出格式、数据范围、样例及解释。