#P15370. [UOI 2026] Divisors

[UOI 2026] Divisors

题目描述

给定 2n2n 个整数 b1,b2,,b2nb_1, b_2, \dots, b_{2n} 和一个整数 xx。对于所有 ii,满足 1bix1 \le b_i \le x

在一次操作中,你可以选择任意下标 ii (1i2n1 \le i \le 2n),并将该数 bib_i 增加 11

你需要执行不超过 x2\left\lfloor \frac{x}{2} \right\rfloor 次操作,并将所有数分成 nn 对,使得在操作完成后,每对中一个数能被另一个数整除。

换句话说,你需要找到非负整数 d1,d2,,d2nd_1, d_2, \dots, d_{2n} 以及下标 1,2,,2n1, 2, \dots, 2n 的一个 nn 对划分,使得:

  • $\sum\limits_{i=1}^{2n} d_i \le \left\lfloor \frac{x}{2} \right\rfloor$,即所有 did_i 之和不超过 x2\frac{x}{2} 向下取整的值;
  • 若记 ci=bi+dic_i = b_i + d_i,则对于每一对下标 (u,v)(u, v),要么 cucvc_u \mid c_v,要么 cvcuc_v \mid c_u,即 cuc_u 整除 cvc_vcvc_v 整除 cuc_u

保证在给定的约束下,答案总是存在。

y\left\lfloor y \right\rfloor 表示不超过 yy 的最大整数。例如,7/2=3\left\lfloor 7/2 \right\rfloor = 3

输入格式

第一行包含一个整数 tt (1t104)(1 \le t \le 10^4) —— 测试数据的组数。

每组测试数据包含两行。

测试数据的第一行包含两个整数 nnxx (1n1051 \le n \le 10^5, 1x1091 \le x \le 10^9)。

第二行包含 2n2n 个整数 b1,b2,,b2nb_1, b_2, \dots, b_{2n} (1bix1 \le b_i \le x)。

保证所有测试数据的 nn 之和不超过 10510^5

输出格式

对于每组测试数据,按以下格式输出答案。

首先,输出 nn 行。在第 jj 行中,输出两个整数 uju_jvjv_j —— 组成第 jj 对的两个数的原始下标。

每个从 112n2n 的下标必须在所有对中恰好出现一次。

然后,输出一行包含 2n2n 个整数 d1,d2,,d2nd_1, d_2, \dots, d_{2n},其中 did_i 是对数字 bib_i 执行的操作次数。必须满足:对于所有 1i2n1 \le i \le 2n,有 di0d_i \ge 0,并且 $\sum\limits_{i=1}^{2n} d_i \le \left\lfloor \frac{x}{2} \right\rfloor$。

ci=bi+dic_i = b_i + d_i。对于输出的每一对 (uj,vj)(u_j, v_j),必须满足:cujcvjc_{u_j} \mid c_{v_j}cvjcujc_{v_j} \mid c_{u_j}

如果存在多个正确答案,你可以输出其中任意一个。

输入输出样例 #1

输入 #1

2
4 8
3 1 4 2 5 3 8 5
3 8
7 2 6 3 5 8

输出 #1

1 6
2 7
3 4
5 8
0 0 0 0 0 0 0 0
2 3
4 6
1 5
3 0 0 0 0 1

说明/提示

在第一个例子中,我们可以将数字分成对 (3,3)(3, 3)(1,8)(1, 8)(4,2)(4, 2)(5,5)(5, 5)。每一对中,一个数都能被另一个整除,因此我们不需要执行任何操作。

在第二个例子中,我们将第一个数增加 33,最后一个数增加 11。我们得到新的数组:[10,2,6,3,5,9][10, 2, 6, 3, 5, 9]。随后,我们将数字分成对 (2,6)(2, 6)(3,9)(3, 9)(10,5)(10, 5)。操作总次数为 $3 + 1 = 4 \le \left\lfloor \frac{x}{2} \right\rfloor = 4$。注意,这并非可能的最少操作次数。

计分

  • (66 分):t=1t = 1n4n \le 4bi50b_i \le 50
  • (77 分):t=1t = 1n10n \le 10bi104b_i \le 10^4
  • (77 分):t=1t = 1n10n \le 10
  • (1010 分):对于所有 ii,有 bix2b_i \ge \left\lceil \frac{x}{2} \right\rceil
  • (1010 分):对于每个 ii,要么 bix6b_i \le \left\lfloor \frac{x}{6} \right\rfloor,要么 bixx6b_i \ge x - \left\lfloor \frac{x}{6} \right\rfloor
  • (1010 分):可以不执行任何操作就得到答案。所有数都是素数的幂,所有数不超过 10610^6t10t \le 10
  • (1313 分):可以不执行任何操作就得到答案。每个数都是至多两个素数的乘积,每个素数在所有数的分解中总共出现至多两次,所有数不超过 10610^6t10t \le 10
  • (1717 分):存在一个答案,使得初始数组的相邻数可以两两配对:(1,2),(3,4),,(2n1,2n)(1, 2), (3, 4), \ldots, (2n - 1, 2n)。同时 n1000\sum n \le 1000bi109b_i \le 10^9
  • (2020 分):无额外限制。

翻译由 DeepSeek V4 Pro 完成