AT_ttpc2022_e Name Value

题目描述

大学 A 和大学 B 决定合并。大学 A 的名字为 $A$,大学 B 的名字为 $B$。现在我们需要为合并后的新大学起一个名字 $C$,具体规定如下: - 从 $A$ 的所有非空子序列中选取一个,记为 $a$。 - 从 $B$ 的所有非空子序列中选取一个,记为 $b$。 - 新大学名 $C$ 是将 $a$ 和 $b$ 按顺序连接得到的字符串。 现在给定 $Q$ 个字符串 $S_1, S_2, \dots, S_Q$。请你判断每个字符串能否作为 $C$ 出现。如果可以,请求出所有可能的 $|\text{len}(a) - \text{len}(b)|$ 中的最小值($\text{len}(x)$ 表示 $x$ 的长度);如果不可以,输出 $-1$。 什么是子序列?对于字符串 $X$,通过去除 $0$ 个及以上字符后,按照原本顺序排列剩下的字符所得的字符串称为 $X$ 的子序列。例如,`ac` 和 `abc` 都是 `abc` 的子序列,但 `ca` 不是 `abc` 的子序列。

输入格式

输入按以下格式从标准输入读入: > $A$ $B$ $Q$ $S_1$ $S_2$ $\vdots$ $S_Q$

输出格式

输出 $Q$ 行。对于每个 $1 \leq i \leq Q$,如果 $S_i$ 可能作为 $C$,则输出 $|\text{len}(a) - \text{len}(b)|$ 的最小值;否则输出 $-1$。

说明/提示

### 部分分 - 对于 $Q \leq 20$ 的数据集,得分为 $100$ 分。 ### 样例解释 1 - 对于 $S_1 = $ `The University`,可以取 $a = $ `Th`,$b = $ `e University`,这样 $C = $ `The University`,此时 $|\text{len}(a) - \text{len}(b)| = 10$。 - 对于 $S_4 = $ `Tokyo Tech`,注意 $b$ 不能是空串。 - 与常规题目不同,空格也是字符串的一部分,需要注意。 ### 数据范围 - $Q$ 是整数。 - $1 \leq Q \leq 10^6$。 - $A, B, S_1, S_2, \dots, S_Q$ 都是由小写英文字母、大写英文字母及空格组成的字符串。 - $1 \leq \text{len}(A), \text{len}(B) \leq 10^5$。 - $2 \leq \text{len}(S_i) \leq 10^5$($1 \leq i \leq Q$)。 - $\displaystyle\left(\sum_{i = 1}^Q\text{len}(S_i)\right) \leq 2 \times 10^6$。 由 ChatGPT 5 翻译