#P14604. [IATI2024 day2]lex_gcd
[IATI2024 day2]lex_gcd
题目描述
给定一个由 N 个正整数组成的序列 a_1, a_2, ..., a_N。你需要找出它的一个字典序最小的 K-gcd 等价排列。
如果两个序列 a_1, a_2, ..., a_N 和 b_1, b_2, ..., b_N 互为排列,并且满足:
- 对于任意一组由
K个不同下标组成的集合; - 取出这
K个位置上的元素; - 在两个序列中,这
K个元素的最大公约数(gcd)都相同;
那么这两个序列就被称为 K-gcd 等价。
不过这里还有一个额外操作:在寻找答案之前,你最多可以选择一个元素,将其乘以给定整数 X。
- 你也可以选择不进行任何乘法操作;
- 保证
X要么等于1,要么是一个质数; - 如果你选择先进行乘法预处理,那么最终输出的序列必须是预处理之后序列的一个
K-gcd等价排列。
你的目标是在所有允许的预处理方式中,使最终得到的 K-gcd 等价排列的字典序最小。
输入格式
第一行一个整数 T,表示测试组数。
接下来每组测试包含:
- 一行三个正整数
N, K, X - 一行
N个正整数a_1, a_2, ..., a_N
输出格式
对于每组测试,输出 N 个整数,表示在允许预处理之后,字典序最小的 K-gcd 等价序列。
约束条件
2 <= sum N <= 10^5(所有测试组的N之和)2 <= K <= N1 <= X <= 10^9,且X要么为1,要么为质数1 <= a_i <= 10^9
子任务
| 子任务 | 分值 | 前置子任务 | N |
X |
其他限制 |
|---|---|---|---|---|---|
| 1 | 6 | - | sum N <= 5 |
X = 1 |
无 |
| 2 | 19 | 1 | sum N <= 1000 |
||
| 3 | 13 | 1-2 | sum N <= 10^5 |
||
| 4 | 4 | 1 | sum N <= 100 |
任意 | |
| 5 | 1,2,4 | sum N <= 1000 |
|||
| 6 | 31 | - | sum N <= 10^5 |
a_i != a_j (i != j) |
|
| 7 | 23 | 1-6 | 无 |
只有当某个子任务以及其要求的所有前置子任务全部通过时,才能获得该子任务的分数。
样例
输入
2
3 2 1
2 6 4
4 2 3
7 3 6 9
输出
2 4 6
3 6 9 21
说明
共有两组测试。
- 对于第一组,不需要做任何预处理。因为所有二元组的
gcd都保持为2,所以答案是2 4 6。 - 对于第二组,将第一个元素乘以
3后,得到的字典序最小K-gcd等价排列为3 6 9 21。