CF123D String

题目描述

给定一个字符串 $s$。对于每一对满足 $1 \leq l \leq r \leq |s|$ 的数字 $l$ 和 $r$,它们对应于字符串 $s$ 的一个子串,该子串从位置 $l$ 开始,到位置 $r$ 结束(包含两端)。 我们定义两个字符串的函数 $F(x, y)$ 如下:我们找到所有使得字符串 $x$ 的对应子串等于字符串 $y$ 的数对 $(l, r)$,并将这些数对按第一个数字从小到大排序。函数 $F(x, y)$ 的值等于该列表中所有非空连续子序列的数量。 例如:$F(babbabbababbab, babb) = 6$。对应的数对列表如下: $(1,4),(4,7),(9,12)$ 它的连续子序列有: - $(1,4)$ - $(4,7)$ - $(9,12)$ - $(1,4),(4,7)$ - $(4,7),(9,12)$ - $(1,4),(4,7),(9,12)$ 你的任务是,对于给定的字符串 $s$,计算所有 $x$ 属于 $s$ 的所有子串的 $F(s, x)$ 的和。

输入格式

一行,包含给定的字符串 $s$,仅由小写拉丁字母组成($1 \leq |s| \leq 10^{5}$)。

输出格式

输出一个整数,即所求的和。 请不要在 C++ 中使用 %lld 格式符来读写 64 位整数。建议使用 cin、cout 流或 %I64d 格式符。

说明/提示

在第一个样例中,$x$ 分别为 "a"、"aa"、"aaa" 和 "aaaa" 时,函数值分别为 10、6、3 和 1。 在第二个样例中,对于任意满足条件的 $x$,函数值均为 1。 由 ChatGPT 4.1 翻译