#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 )。
我们需要计算每个前缀的最大周期长度:

  1. 前缀 "b":没有 proper 前缀(除了空串),所以最大周期长度 = 0。
  2. 前缀 "ba":proper 前缀 "b""ba" 不是 "bb" 的前缀,所以周期不存在,长度 = 0。
  3. 前缀 "bab":proper 前缀 "b", "ba"。检查 "b""bab""bb" 的前缀吗?不是。检查 "ba""bab""baba" 的前缀吗?是。所以周期 "ba" 长度 2。
  4. 前缀 "baba":proper 前缀 "b", "ba", "bab"
    • "b""baba""bb" 的前缀?不是。
    • "ba""baba""baba" 的前缀?是,并且 "ba" 是 proper 前缀,长度 2。
    • "bab""baba""babbab" 的前缀?不是。
      所以最大周期长度 = 2。
  5. 前缀 "babab":proper 前缀 "b", "ba", "bab", "baba"
    检查 "baba""babab""babababa" 的前缀?是,长度 4。
  6. 前缀 "bababa":proper 前缀中 "babab" 长度 5,但 "bababa""bababbabab" 的前缀?不是。
    检查 "baba""bababa""babababa" 的前缀?是,长度 4。
  7. 前缀 "bababab":proper 前缀中 "bababa" 长度 6 不行(因为 "bababab" 不是 "babababababa" 的前缀)。
    检查 "babab""bababab""bababbabab" 的前缀?不是。
    检查 "baba""bababab""babababa" 的前缀?是,长度 4。
  8. 前缀 "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。


这样题目就完整了,包括题意、输入输出格式、数据范围、样例及解释。