P12713 [KOI 2021 Round 1] 公共子序列扩展
题目背景
试题来源:。中文翻译做了少量本土化修改。
按照[署名—非商业性使用—相同方式共享 4.0 协议国际版](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh-hans)进行授权。
题目描述
对一个序列来说,删除其中的若干个元素(可能为 0 个)后所得到的新序列被称为它的“子序列”。例如,字符串 `aab` 是 $X =$ `ababca` 的子序列,但不是 $Y =$ `cbabba` 的子序列。
若两个序列中都包含某个子序列 $W$,则 $W$ 称为这两个序列的“公共子序列”。例如,在上述的 $X$ 和 $Y$ 中,`baa` 是它们的公共子序列,但 `aab` 不是。
现在,给定两个字符串 $X$ 和 $Y$,以及它们的一个公共子序列 $W$,我们想判断 $W$ 是否**可以扩展**。定义如下:
- 若可以在 $W$ 的某个位置插入一个字符,使其仍然为 $X$ 和 $Y$ 的公共子序列,则称 $W$ 是“可扩展”的;
- 否则,称其为“不可扩展”的。
例如,若 $W =$ `baa`,可以扩展为 `baba`,所以 $W$ 是可扩展的。但若 $W =$ `ca`,则无法再扩展。
请编写程序判断给定的 $W$ 是否可扩展。
输入格式
第一行输入一个整数 $T$,表示测试用例数量。
接下来的 $3 \times T$ 行中,每 3 行描述一个测试用例,依次为:
第 1 行:字符串 $X$
第 2 行:字符串 $Y$
第 3 行:字符串 $W$
输出格式
对每个测试用例,输出一行:若 $W$ 可扩展,输出 `1`;否则输出 `0`。
说明/提示
**约束条件**
- 每组输入中包含 1 到 100 个测试用例
- 所有测试用例中,$|X|$ 的总长度不超过 200\,000,$|Y|$ 的总长度也不超过 200\,000
- $W$ 是 $X$ 和 $Y$ 的公共子序列
- 所有序列仅包含小写英文字母
**子任务**
1.(14 分)$|W| = 1$
2.(17 分)$|X|$ 和 $|Y|$ 的总长度均不超过 300
3.(25 分)$|X|$ 和 $|Y|$ 的总长度均不超过 20\,000
4.(44 分)无附加约束条件