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