CF2211B Mickey Mouse Constructive
题目描述
给定一个数组 $a$,定义 $f(a)$ 为将 $a$ 拆分为一个或多个子数组的方案数,满足:
- 每个元素恰好出现在一个子数组中。
- 所有子数组的元素和相等。
例如,若 $a=[1,1]$,则 $f(a)=2$,因为可以有两种方式将 $[1,1]$ 拆分:
- $[1,1]$,只有一个子数组,它的和为 $2$。
- $[1]+[1]$,两个子数组,二者的和都是 $1$。
现给定两个整数 $x$ 和 $y$,要求找到长度为 $x+y$ 的所有数组 $a$(其中包含 $x$ 个 $1$ 和 $y$ 个 $-1$,顺序任意)中,$f(a)$ 的最小值。由于答案可能很大,输出 $f(a) \bmod 676\,767\,677$。此外,需构造一个能够取到最小值的数组。
$^*$ 这里数组 $b$ 是数组 $c$ 的子数组,指可以通过从 $c$ 首尾各删除若干(可以为零或全部)元素获得 $b$。
输入格式
每组测试数据包含多组数据。第一行包含一个整数 $t$($1 \le t \le 10^4$),表示测试用例数量。
每组测试数据包含一行两个整数 $x$ 和 $y$($0 \leq x,y \leq 2 \cdot 10^5$),保证 $x+y \geq 1$。
保证所有测试用例中 $x$ 的总和不超过 $2 \cdot 10^5$,所有测试用例中 $y$ 的总和也不超过 $2 \cdot 10^5$。
输出格式
对于每组测试数据,输出两行:
第一行输出该测试数据下,所有合法数组 $a$ 中 $f(a)$ 的最小值(对 $676\,767\,677$ 取模)。
第二行输出一个可以实现该最小值的数组 $a$(长度为 $x+y$,$x$ 个 $1$ 和 $y$ 个 $-1$,顺序任选)。
注意,你要最小化 $f(a)$,并对其最小值取模,而不是最小化 $f(a) \bmod 676\,767\,677$。
说明/提示
在第一个测试用例中,$x=2$ 且 $y=0$。此时唯一的数组是 $a=[1,1]$,其 $f(a)=2$,解释如上。
在第二个测试用例中,$x=1$ 且 $y=1$。一种可以实现最小 $f(a)$ 的数组为 $a=[1,-1]$,此时 $f(a)=1$(因为唯一的分割方式就是 $[[1,-1]]$,全数组作为一个子数组)。
由 ChatGPT 5 翻译