题目描述
给定 2n 个整数 b1,b2,…,b2n 和一个整数 x。对于所有 i,满足 1≤bi≤x。
在一次操作中,你可以选择任意下标 i (1≤i≤2n),并将该数 bi 增加 1。
你需要执行不超过 ⌊2x⌋ 次操作,并将所有数分成 n 对,使得在操作完成后,每对中一个数能被另一个数整除。
换句话说,你需要找到非负整数 d1,d2,…,d2n 以及下标 1,2,…,2n 的一个 n 对划分,使得:
- $\sum\limits_{i=1}^{2n} d_i \le \left\lfloor \frac{x}{2} \right\rfloor$,即所有 di 之和不超过 2x 向下取整的值;
- 若记 ci=bi+di,则对于每一对下标 (u,v),要么 cu∣cv,要么 cv∣cu,即 cu 整除 cv 或 cv 整除 cu。
保证在给定的约束下,答案总是存在。
⌊y⌋ 表示不超过 y 的最大整数。例如,⌊7/2⌋=3。
输入格式
第一行包含一个整数 t (1≤t≤104) —— 测试数据的组数。
每组测试数据包含两行。
测试数据的第一行包含两个整数 n 和 x (1≤n≤105, 1≤x≤109)。
第二行包含 2n 个整数 b1,b2,…,b2n (1≤bi≤x)。
保证所有测试数据的 n 之和不超过 105。
输出格式
对于每组测试数据,按以下格式输出答案。
首先,输出 n 行。在第 j 行中,输出两个整数
uj 和 vj —— 组成第 j 对的两个数的原始下标。
每个从 1 到 2n 的下标必须在所有对中恰好出现一次。
然后,输出一行包含 2n 个整数 d1,d2,…,d2n,其中 di 是对数字 bi 执行的操作次数。必须满足:对于所有 1≤i≤2n,有 di≥0,并且 $\sum\limits_{i=1}^{2n} d_i \le \left\lfloor \frac{x}{2} \right\rfloor$。
令 ci=bi+di。对于输出的每一对 (uj,vj),必须满足:cuj∣cvj 或 cvj∣cuj。
如果存在多个正确答案,你可以输出其中任意一个。
输入输出样例 #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)、(1,8)、(4,2) 和 (5,5)。每一对中,一个数都能被另一个整除,因此我们不需要执行任何操作。
在第二个例子中,我们将第一个数增加 3,最后一个数增加 1。我们得到新的数组:[10,2,6,3,5,9]。随后,我们将数字分成对 (2,6)、(3,9) 和 (10,5)。操作总次数为 $3 + 1 = 4 \le \left\lfloor \frac{x}{2} \right\rfloor = 4$。注意,这并非可能的最少操作次数。
计分
- (6 分):t=1,n≤4,bi≤50。
- (7 分):t=1,n≤10,bi≤104。
- (7 分):t=1,n≤10。
- (10 分):对于所有 i,有 bi≥⌈2x⌉。
- (10 分):对于每个 i,要么 bi≤⌊6x⌋,要么 bi≥x−⌊6x⌋。
- (10 分):可以不执行任何操作就得到答案。所有数都是素数的幂,所有数不超过 106,t≤10。
- (13 分):可以不执行任何操作就得到答案。每个数都是至多两个素数的乘积,每个素数在所有数的分解中总共出现至多两次,所有数不超过 106,t≤10。
- (17 分):存在一个答案,使得初始数组的相邻数可以两两配对:(1,2),(3,4),…,(2n−1,2n)。同时 ∑n≤1000 且 bi≤109。
- (20 分):无额外限制。
翻译由 DeepSeek V4 Pro 完成