CF2156C.Maximum GCD on Whiteboard
普及/提高-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
给定一个整数 k,以及 n 个正整数 a1,a2,…,an 写在白板上,其中 1≤ai≤n。你可以进行以下操作:
- 擦除(Erase):任选白板上的一个整数,将其擦除。该操作最多可以执行 k 次。
- 分裂(Split):从白板上选择一个满足 x≥3 的整数 x,将其分裂为 x1、x2 和 x3,使得 x1+x2+x3=x,且 1≤x1≤x2≤x3。然后将 x 从白板上擦除,并将 x1 和 x3 写到白板上(x2 被丢弃,不会写到白板上)。该操作可以执行任意次数。
一组整数 b 的美丽值(beauty)定义为 b 中所有元素的最大公约数。即最大的整数 d,使得对于 b 中的每个元素 x,都有 d 整除 x。
你的任务是,在执行不超过 k 次擦除操作和任意次分裂操作后,求白板上可能剩下整数的最大美丽值。
输入格式
每个测试用例包含若干组数据。第一行包含一个整数 t(1≤t≤104),表示测试用例数。
每组测试用例的第一行包含两个整数 n 和 k(1≤n≤2⋅105,0≤k≤n−1),分别表示白板上的整数数量和允许执行擦除操作的最多次数。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n),表示白板上最初写下的整数。
保证所有测试用例中 n 的总和不超过 2⋅105。
输出格式
对于每组测试用例,输出一个整数,表示在操作后白板上剩余整数的最大美丽值。
输入输出样例
输入#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
说明/提示
在第一个测试用例中,你可以按以下顺序操作:
- 擦除 7。白板上剩余整数为 [4,9,6,8,2,6,8,2]。
- 将 9 分裂为 2、3、4。9 被擦除,新增 2 和 4。白板上变为 [4,2,4,6,8,2,6,8,2]。
- 将 8 分裂为 2、2、4。8 被擦除,新增 2 和 4。白板上变为 [4,2,4,6,2,4,2,6,8,2](分裂哪一个 8 没有关系,元素顺序也无关紧要)。
最终白板上整数的美丽值为 2,即为这些数的最大公约数(2、4、6、8均能被 2 整除)。注意最后一步分裂操作不是必要的,第二步结束后美丽值就已经是 2。
在第二个测试用例中,注意擦除操作只能删除某个数的一次出现,如果有多个同样的数,只能擦除其中一个。所以即使擦除了一个 7,白板上还剩余一个 7,无法像第一个样例那样继续操作。
在第三个测试用例中,可以擦除 1、1、2、3 和 4,只剩 [5,5]。这两个数的最大公约数是 5,最大美丽值为 5。
由 ChatGPT 5 翻译
输入解题思路,AI测评打分。不知道怎么写?