AT_agc074_b [AGC074B] Swap if Equal Length and Sum

题目描述

给定两个长度为 $N$、每个元素为 $0$ 或 $1$ 的整数序列 $A=(A_1,A_2,\dots,A_N)$ 和 $B=(B_1,B_2,\dots,B_N)$。令 $A[i,j]$ 表示序列 $A$ 中从第 $i$ 个到第 $j$ 个元素的连续子序列。如果 $i>j$,则 $A[i,j]$ 为长度为 $0$ 的序列。你可以对 $A$ 最多进行 $\lfloor\frac{N}{2}\rfloor$ 次如下操作: - 选择四个整数 $a,b,c,d$,满足以下三个条件: - $1 \leq a \leq b < c \leq d \leq N$ - $b-a=d-c$ - $\sum_{i=a}^{b}{A_i}=\sum_{i=c}^{d}{A_i}$ - 将 $A[a,b]$ 和 $A[c,d]$ 交换。更准确地说,用以下顺序拼接得到的新序列替换 $A$:$A[1,a-1]$,$A[c,d]$,$A[b+1,c-1]$,$A[a,b]$,$A[d+1,N]$。 判断是否有可能通过若干次操作后使 $A$ 与 $B$ 完全相同。如果可以,请构造出一组操作方案。 对于每组输入,需要解答 $T$ 个独立的测试用例。

输入格式

输入从标准输入读入,格式如下: > $T$ > $case_1$ > $case_2$ > $\vdots$ > $case_T$ 每个测试用例如下格式: > $N$ > $A_1\ A_2\ \dots\ A_N$ > $B_1\ B_2\ \dots\ B_N$

输出格式

按以下格式输出答案: > $output_1$ > $output_2$ > $\vdots$ > $output_T$ 其中 $output_t$ 表示第 $t$ 个测试用例的输出。 对于每个测试用例,如果你可以将 $A$ 变为 $B$,记所用操作次数为 $K$,每次操作所选的参数为 $(a_k,b_k,c_k,d_k)$,则输出格式如下: > Yes $K$ $a_1$ $b_1$ $c_1$ $d_1$ $a_2$ $b_2$ $c_2$ $d_2$ > $\vdots$ > $a_K$ $b_K$ $c_K$ $d_K$ 如果无法将 $A$ 变为 $B$,则输出 `No`。

说明/提示

### 样例解释 1 第一个测试用例中,初始 $A$ 为 $(1,0,0,1,0,1,0,1)$。 先进行一次 $(a,b,c,d)=(3,4,6,7)$ 的操作,$A$ 变为 $(1,0,1,0,0,0,1,1)$。 再进行一次 $(a,b,c,d)=(1,4,5,8)$ 的操作,$A$ 变为 $(0,0,1,1,1,0,1,0)$,与 $B$ 完全相同。 第二个测试用例,无论如何无法将 $A$ 变为 $B$。 第三个测试用例,$A$ 一开始就与 $B$ 完全相同,无需操作。 ### 数据范围与约定 - $1 \leq T \leq 25000$ - $2 \leq N \leq 2 \times 10^5$ - $0 \leq A_i \leq 1$ - $0 \leq B_i \leq 1$ - 所有测试用例中 $N$ 的总和不超过 $2\times 10^5$。 - 所有输入均为整数。 由 ChatGPT 5 翻译