#P16462. [UOI 2026] Divisors

    ID: 18845 远端评测题 700ms 512MiB 尝试: 0 已通过: 0 显示难度提高 上传者: 标签>Special Judge2026UOI(乌克兰)

[UOI 2026] Divisors

题目描述

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

在一次操作中,你可以选择任意下标 ii (1≤i≤2n1 \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),要么 cu∣cvc_u \mid c_v,要么 cv∣cuc_v \mid c_u,即 cuc_u 整除 cvc_v 或 cvc_v 整除 cuc_u。

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

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

输入格式

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

每组测试数据包含两行。

测试数据的第一行包含两个整数 nn 和 xx (1≤n≤1051 \le n \le 10^5, 1≤x≤1091 \le x \le 10^9)。

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

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

输出格式

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

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

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

然后,输出一行包含 2n2n 个整数 d1,d2,…,d2nd_1, d_2, \dots, d_{2n},其中 did_i 是对数字 bib_i 执行的操作次数。必须满足:对于所有 1≤i≤2n1 \le i \le 2n,有 di≥0d_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),必须满足:cuj∣cvjc_{u_j} \mid c_{v_j} 或 cvj∣cujc_{v_j} \mid c_{u_j}。

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

2
4 8
3 1 4 2 5 3 8 5
3 8
7 2 6 3 5 8
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 = 1,n≤4n \le 4,bi≤50b_i \le 50。
  • (77 分):t=1t = 1,n≤10n \le 10,bi≤104b_i \le 10^4。
  • (77 分):t=1t = 1,n≤10n \le 10。
  • (1010 分):对于所有 ii,有 bi≥⌈x2⌉b_i \ge \left\lceil \frac{x}{2} \right\rceil。
  • (1010 分):对于每个 ii,要么 bi≤⌊x6⌋b_i \le \left\lfloor \frac{x}{6} \right\rfloor,要么 bi≥x−⌊x6⌋b_i \ge x - \left\lfloor \frac{x}{6} \right\rfloor。
  • (1010 分):可以不执行任何操作就得到答案。所有数都是素数的幂,所有数不超过 10610^6,t≤10t \le 10。
  • (1313 分):可以不执行任何操作就得到答案。每个数都是至多两个素数的乘积,每个素数在所有数的分解中总共出现至多两次,所有数不超过 10610^6,t≤10t \le 10。
  • (1717 分):存在一个答案,使得初始数组的相邻数可以两两配对:(1,2),(3,4),…,(2n−1,2n)(1, 2), (3, 4), \ldots, (2n - 1, 2n)。同时 ∑n≤1000\sum n \le 1000 且 bi≤109b_i \le 10^9。
  • (2020 分):无额外限制。

翻译由 DeepSeek V4 Pro 完成