3698: 牛牛的 border(第五轮04)

内存限制:256 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:1 解决:1

题目描述

对于一个长度为N 的字符串S,我们称字符串S0 S1 S2. . . Si 为字符串的一个前缀,称字 符串sisi+1si+2  … sn−1为字符串的一个后缀。

border 这个东西是字符串中的一个很有趣的概念,你可以在各种字符串算法中 见到它。

若字符串S存在一个前缀S0 S1 S2. . . Sk−1与后缀snksn−k+1sn−k+2  … sn−1完全匹配, 则称S有一个长度大小为k border。

一般来讲,border 是不包括自身的,因为研究字符串问题时一般都是关注子串, 所以我们定义 border 不能完全匹配自身,即一个长度为N 的字符串虽然有一个 长度大小为N的前缀和后缀完全匹配,我们也不认为这是一个合法的 border。

对于一个字符串S,牛牛还定义了它的border val,所谓border val就是指字符串 中所有 border 的长度总和。

例如字符串"abacaba"的border val就是  1+3=4。(它有一个长度大小为  3  的 border "aba"和一个长度大小为 1  border  "a")

我们称一个字符串中连续的一段为字符串的一个子串, 一个长度大小为N 的字符 串有N ∗ (N − 1)/2个子串。

现在给定一个字符串S,牛牛想要知道所有子串的border val之和是多少。


输入

第一行输入一个正整数N,表示字符串的长度。

接下来一行输入一个长度为N 的字符串S, S串仅包含小写英文字母。

输出

仅一个整数,表示所有子串的border val之和。。

样例输入 复制

4
aaaa

样例输出 复制

15

提示

【样例 1 输入】

4

aaaa

【样例 1 输出】

15

【样例 1 说明】

borderval("aa")=1

border  val("aaa")=1+2

border val("aaaa")=1+2+3

1*3+3*2+6=15

【样例 2 输入】

52

ababababababababccdwjkodflksnvlkjwsdlaqsabababababab 【样例 2 输出】

3727

【数据范围】

对于前 20%的测试数据,保证N ≤ 100。

对于前 30%的测试数据,保证N ≤ 3000。

对于另 10%的测试数据,保证字符串仅有小写英文字母'a'组成{}。 

对于另 10%的测试数据,保证字符串完全随机。

对于另 100%的测试数据,保证1 ≤ N ≤ 10^5 字符串仅包括小写英文字母。

来源/分类