CF2156C.Maximum GCD on Whiteboard

普及/提高-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

给定一个整数 kk,以及 nn 个正整数 a1,a2,…,ana_1, a_2, \ldots, a_n 写在白板上,其中 1≤ai≤n1 \le a_i \le \boldsymbol{n}。你可以进行以下操作:

  • 擦除(Erase):任选白板上的一个整数,将其擦除。该操作最多可以执行 kk 次。
  • 分裂(Split):从白板上选择一个满足 x≥3x\ge 3 的整数 xx,将其分裂为 x1x_1、x2x_2 和 x3x_3,使得 x1+x2+x3=xx_1 + x_2 + x_3 = x,且 1≤x1≤x2≤x31 \le x_1 \le x_2 \le x_3。然后将 xx 从白板上擦除,并将 x1x_1 和 x3x_3 写到白板上(x2x_2 被丢弃,不会写到白板上)。该操作可以执行任意次数。

一组整数 bb 的美丽值(beauty)定义为 bb 中所有元素的最大公约数。即最大的整数 dd,使得对于 bb 中的每个元素 xx,都有 dd 整除 xx。

你的任务是,在执行不超过 kk 次擦除操作和任意次分裂操作后,求白板上可能剩下整数的最大美丽值。

输入格式

每个测试用例包含若干组数据。第一行包含一个整数 tt(1≤t≤1041 \le t \le 10^4),表示测试用例数。

每组测试用例的第一行包含两个整数 nn 和 kk(1≤n≤2⋅1051 \le n \le 2 \cdot 10^5,0≤k≤n−10 \le k \le n-1),分别表示白板上的整数数量和允许执行擦除操作的最多次数。

第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(1≤ai≤n1 \le a_i \le \boldsymbol{n}),表示白板上最初写下的整数。

保证所有测试用例中 nn 的总和不超过 2⋅1052 \cdot 10^5。

输出格式

对于每组测试用例,输出一个整数,表示在操作后白板上剩余整数的最大美丽值。

输入输出样例

  • 输入#1

    6
    9 1
    4 9 6 8 2 6 7 8 2
    10 1
    4 9 6 8 2 6 7 8 2 7
    7 5
    1 1 2 3 4 5 5
    7 4
    1 1 2 3 4 5 5
    14 3
    14 12 7 12 9 9 12 4 3 1 3 6 9 13
    1 0
    1

    输出#1

    2
    1
    5
    1
    3
    1

说明/提示

在第一个测试用例中,你可以按以下顺序操作:

  • 擦除 77。白板上剩余整数为 [4,9,6,8,2,6,8,2][4,9,6,8,2,6,8,2]。
  • 将 99 分裂为 22、33、44。99 被擦除,新增 22 和 44。白板上变为 [4,2,4‾,6,8,2,6,8,2][4,\underline{2,4},6,8,2,6,8,2]。
  • 将 88 分裂为 22、22、44。88 被擦除,新增 22 和 44。白板上变为 [4,2,4,6,2,4‾,2,6,8,2][4,2,4,6,\underline{2,4},2,6,8,2](分裂哪一个 88 没有关系,元素顺序也无关紧要)。

最终白板上整数的美丽值为 22,即为这些数的最大公约数(22、44、66、88均能被 22 整除)。注意最后一步分裂操作不是必要的,第二步结束后美丽值就已经是 22。

在第二个测试用例中,注意擦除操作只能删除某个数的一次出现,如果有多个同样的数,只能擦除其中一个。所以即使擦除了一个 77,白板上还剩余一个 77,无法像第一个样例那样继续操作。

在第三个测试用例中,可以擦除 11、11、22、33 和 44,只剩 [5,5][5, 5]。这两个数的最大公约数是 55,最大美丽值为 55。

由 ChatGPT 5 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页