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 翻译