C0401 [NOI2016Day1-A]优秀的拆分

内存限制:512 MB 时间限制:1500 ms

题目描述

如果一个字符串可以被拆分为𝐴𝐴𝐵𝐵的形式,其中𝐴和𝐵是任意非空字符串,则我们称该字符串的这种拆分是优秀的。

例如,对于字符串aabaabaa,如果令𝐴 =aab,𝐵 =a,我们就找到了这个字符串拆分成𝐴𝐴𝐵𝐵的一种方式。

一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分。比如我们令𝐴 =a,𝐵 =baa,也可以用𝐴𝐴𝐵𝐵表示出上述字符串;但是,字符串abaabaa就没有优秀的拆分。

现在给出一个长度为𝑛的字符串𝑆,我们需要求出,在它所有子串的所有拆分方式中,优秀拆分的总个数。这里的子串是指字符串中连续的一段。

以下事项需要注意:

  1. 出现在不同位置的相同子串,我们认为是不同的子串,它们的优秀拆分均会被计入答案。
  2. 在一个拆分中,允许出现𝐴 = 𝐵。例如cccc存在拆分𝐴 = 𝐵 =c。
  3. 字符串本身也是它的一个子串。

输入格式

第一行只有一个整数$𝑇$,表示数据的组数。保证$1≤𝑇≤10$。

接下来$𝑇$行,每行包含一个仅由英文小写字母构成的字符串$𝑆$,意义如题所述。

输出

输出$𝑇$行,每行包含一个整数,表示字符串$𝑆$所有子串的所有拆分中,总共有多少个是优秀的拆分。

样例

样例输入 1

4 aabbbb cccccc aabaabaabaa bbaabaababaaba

样例输出 1

3 5 4 7

提示

【样例1说明】

我们用$𝑆[𝑖,𝑗]$表示字符串$𝑆$第$𝑖$个字符到第$j$个字符的子串(从1开

始计数)。

第一组数据中,共有3个子串存在优秀的拆分:

𝑆[1,4] =aabb,优秀的拆分为𝐴 =a,𝐵 =b;
𝑆[3,6] =bbbb,优秀的拆分为𝐴 =b,𝐵 =b;
𝑆[1,6] =aabbbb,优秀的拆分为𝐴 =a,𝐵 =bb。

而剩下的子串不存在优秀的拆分,所以第一组数据的答案是3。

第二组数据中,有两类,总共4个子串存在优秀的拆分:

对于子串𝑆[1,4] = 𝑆[2,5] = 𝑆[3,6] =cccc,它们优秀的拆分相同,均为𝐴 =c,𝐵 =c,但由于这些子串位置不同,因此要计算3次;
对于子串𝑆[1,6] =cccccc,它优秀的拆分有2种:𝐴 =c,𝐵 =cc和𝐴 =cc,𝐵 =c,它们是相同子串的不同拆分,也都要计入答案。

所以第二组数据的答案是3 + 2 = 5。

第三组数据中,𝑆[1,8]和𝑆[4,11]各有2种优秀的拆分,其中𝑆[1,8]是问题描述中的例子,所以答案是2 + 2 = 4。

第四组数据中,𝑆[1,4],𝑆[6,11],𝑆[7,12],𝑆[2,11],𝑆[1,8]各有1种优秀的拆分,𝑆[3,14]有2种优秀的拆分,所以答案是5 + 2 = 7。

【子任务】

对于全部的测试点,保证$1 ≤ 𝑇 ≤ 10$。以下对数据的限制均是对于单组输入数据而言的,也就是说同一个测试点下的$𝑇$组数据均满足限制条件。

我们假定$𝑛$为字符串$𝑆$的长度,每个测试点的详细数据范围见下表:

屏幕快照 2019-06-04 上午11.47.12.png