#P16392. [IATI 2024] Lex_gcd

[IATI 2024] Lex_gcd

题目描述

你的任务是,给定一个包含 NN 个正整数的序列 a1,a2,…,aNa_1, a_2, \ldots, a_N,在允许的预处理之后,找出它字典序最小的 KK-gcd⁡\gcd 等价排列。若两个序列互为排列,且对于任意一组从 11 到 NN 中选出的 KK 个互异下标,两序列在这些位置上的元素的最大公约数(gcd⁡\gcd)都相同,则称这两个序列是 KK-gcd⁡\gcd 等价的。

不过有一个附加条件 —— 在寻找这个字典序最小的 KK-gcd⁡\gcd 等价序列之前,你最多可以将 aa 中的一个元素乘以给定的整数 XX。你也可以完全不乘 XX 而保持原序列不变。此外,题目保证 XX 仅能被 11 和自身整除。你的目标是在所有可能的预处理选择(包括不做预处理)中,使得最终得到的序列字典序最小。

请编写一个程序 lex_gcd\texttt{lex\_gcd} 来解决该问题。

输入格式

第一行包含一个整数 TT,表示测试数据的组数。每组测试数据包含三个正整数 NN, KK 和 XX,之后跟着 NN 个正整数 a1,a2,…,aNa_1, a_2, \ldots, a_N。

输出格式

对于每组测试数据,输出 NN 个整数,表示在完成允许的预处理后,字典序最小的 KK-gcd⁡\gcd 等价排列。

2
3 2 1
2 6 4
4 2 3
7 3 6 9
2 4 6
3 6 9 21

提示

样例解释

共有两组测试数据。对于第一组,无需预处理。序列的 KK-gcd⁡\gcd 性质已满足,因为所有数对的最大公约数均为 22。对于第二组,将第一个元素乘以 33 进行预处理后,得到字典序最小的序列 3,6,9,213, 6, 9, 21。

数据范围

  • 所有测试数据中 NN 的总和不超过 10510^5;
  • 2≤K≤N2 \leq K \leq N;
  • 1≤X≤1091 \leq X \leq 10^9,且 XX 要么为 11 要么为质数;
  • 1≤ai≤1091 \leq a_i \leq 10^9。

子任务

子任务 分值 依赖子任务 NN XX 其他限制
11 66 −- ∑N≤5\sum N \leq 5 X=1X = 1 −-
22 1919 11 ∑N≤1000\sum N \leq 1000
33 1313 1−21-2 ∑N≤105\sum N \leq 10^5
44 44 11 ∑N≤100\sum N \leq 100 −-
55 1,2,41,2,4 ∑N≤1000\sum N \leq 1000
66 3131 −- ∑N≤105\sum N \leq 10^5 对于 i≠ji \neq j 有 ai≠aja_i \neq a_j
77 2323 1−61-6 −-

只有在成功通过某子任务的所有测试及其所需依赖子任务的所有测试后,才能获得该子任务的分数。

翻译由 DeepSeek V4 Pro 完成