AT_agc077_a [AGC077A] Reverse A…B

题目描述

给定长度为 $N$ 的字符串 $X$ 和 $Y$,它们仅由字符 `A` 和 `B` 组成。记 $X_i$ 表示 $X$ 的第 $i$ 个字符。 你可以进行 $0$ 到 $\left\lfloor \frac{N}{2} \right\rfloor$ 次如下操作,使 $X$ 变为 $Y$: - 选择一对整数 $(l, r)$,满足 $1\leq l < r \leq N$,且 $X_l=$ `A`,$X_r=$ `B`。将 $X$ 的第 $l$ 位到第 $r$ 位的元素反转。这里,"反转 $X$ 从第 $l$ 位到第 $r$ 位的元素" 指的是同时用 $X_r, X_{r-1}, \ldots, X_{l+1}, X_l$ 替换 $X_l, X_{l+1}, \ldots, X_{r-1}, X_r$。 判断是否可以通过操作将 $X$ 变为 $Y$。如果可能,请输出一种操作序列。 共给出 $T$ 组测试数据,需分别作答。

输入格式

输入由标准输入给出,格式如下: > $T$ > $\mathrm{case}_1$ > $\mathrm{case}_2$ > $\vdots$ > $\mathrm{case}_T$ 每组测试数据格式如下: > $N$ > $X$ > $Y$

输出格式

请按顺序输出 $\mathrm{case}_1, \mathrm{case}_2, \ldots, \mathrm{case}_T$ 的答案。 如果无法通过 $0$ 到 $\left\lfloor \frac{N}{2} \right\rfloor$ 次操作使 $X$ 变为 $Y$,输出 `No`。 如果可以,请输出一种操作序列,格式如下: > Yes $K$ $l_1$ $r_1$ $l_2$ $r_2$ > $\vdots$ > $l_K$ $r_K$ 其中 $K$ 为操作次数,$l_i,r_i$ 是第 $i$ 次操作选择的 $l, r$,需满足: - $0 \leq K \leq \left\lfloor \frac{N}{2} \right\rfloor$ - $1 \leq l_i < r_i \leq N$ 如果有多种合法操作序列,输出任意一种均可。

说明/提示

### 样例解释 1 第一组数据中,$X_3=$`A` 且 $X_5=$`B`,可以选择将 $X$ 第 3 位到第 5 位反转。操作后 $X$ 变为 `ABBAA`,等于 $Y$。 第二组数据中,无论如何操作都无法使 $X$ 变为 $Y$。 ### 约束条件 - $1 \leq T \leq 2.5\times 10^5$ - $2 \leq N \leq 5\times 10^5$ - 所有测试的 $N$ 之和不超过 $5\times 10^5$ - $X$ 和 $Y$ 均为长度为 $N$ 的,仅包含 `A` 和 `B` 的字符串。 - 所有输入均为整数。 由 ChatGPT 5 翻译