AT_tenka1_2014_final_e 田端でバタバタ

题目描述

“重复字符串”是指存在一个非空字符串 $A$,使得该字符串可以表示为 $A+A$ 的形式。在语言学中,这也被称为“叠词”。日语中叠词非常多,通常的句子中也经常出现。这次我们来统计一下这样的字符串。 给定一个由小写字母组成的字符串 $S$,以及 $Q$ 个查询 $[a_i, b_i]$。对于每个查询,求 $S[a_i, b_i]$ 的所有非空子串中,属于重复字符串的那些子串的长度之和。如果存在多个相同的字符串,也要分别计数。 这里,$A+B$ 表示将字符串 $A$ 和 $B$ 连接起来。而 $S[x, y]$ 表示从字符串 $S$ 的第 $x$ 个字符到第 $y$ 个字符(包含两端)所截取的子串。

输入格式

输入通过标准输入给出,格式如下: > $S$ > $Q$ > $a_1\ b_1$ > $a_2\ b_2$ > $\vdots$ > $a_Q\ b_Q$ - 第 $1$ 行给出字符串 $S$,$1 \leq |S| \leq 100000$,$|S|$ 表示字符串 $S$ 的长度。 - 第 $2$ 行给出整数 $Q$,表示查询的个数,$1 \leq Q \leq 100000$。 - 接下来 $Q$ 行,每行包含两个整数 $a_i, b_i$,表示第 $i$ 个查询,$1 \leq a_i \leq b_i \leq |S|$,以空格分隔。

输出格式

对于每个查询,输出一个答案,每行一个,共 $Q$ 行。每个答案后都要换行。

说明/提示

## 部分分 如果你能正确解决 $1 \leq |S| \leq 1000$ 的测试用例,将获得部分分 $100$ 分。 如果你能正确解决 $1 \leq |S| \leq 20000$ 的测试用例,将再获得部分分 $100$ 分。 如果你能正确解决所有测试用例,将再获得 $150$ 分。 ## 样例解释 1 `koko` 和 `pyonpyon` 都是重复字符串。在第 $1$ 个查询中,考虑 `kokoropyonpyon`,其中有 `koko` 和 `pyonpyon` 两个重复字符串,所以答案是 $12$。第 $2$ 个查询中,考虑 `okoropyonpyon`,其中有 `pyonpyon`,所以答案是 $8$。第 $3$ 个查询中,考虑 `kokoropyonpyo`,其中有 `koko`,所以答案是 $4$。 ## 样例解释 2 `attatt`、`ttatta`、`tt`、`tt` 都是重复字符串。两个 `tt` 要分别计数。 ## 样例解释 3 请注意,可能会出现大量的重复字符串。 由 ChatGPT 4.1 翻译