#HK5277. 「UOI 2019 Stage 4 Day2」科扎克·武斯与糖果

「UOI 2019 Stage 4 Day2」科扎克·武斯与糖果

注意事项

在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:

  • C++(标准为 C++ 14 及以上)

请在提交源代码前添加 #include "grader.h"

题目描述

题目译自 Ukrainian Olympiads in Informatics 2019 Stage 4 Day2 T2. Козак Вус та цукерки

科扎克·武斯非常喜欢跳跃,也非常喜欢糖果。有一天,他来到了一条数轴上,数轴上的一些整数点位置有糖果(每个点最多只有一颗糖果)。武斯欣喜若狂,决定尽可能多地收集糖果。为此,他可以选择任意一个大于 11 的整数 xx 作为跳跃长度,并选择一个起始位置 ssss 是一个整数),然后以长度 xx 进行跳跃,访问所有形如 s+kxs + kx 的点,其中 kk 是非负整数。每当武斯到达一个有糖果的点时,他会捡起那颗糖果(尽管这样做可能不太合适!)。

请帮助武斯尽可能多地收集糖果。

交互方式

你需要实现以下函数:

integer solve(integer n, integer g, array of integers m)
  • nn —— 糖果的数量;
  • gg —— 子任务编号;
  • mm —— 糖果位置的数组;
  • 该函数应返回一个整数,表示武斯能收集的最大糖果数量。

输入格式

第一行包含两个整数 nngg (1n105,0g6)(1 \leq n \leq 10^{5}, 0 \leq g \leq 6),分别表示糖果数量和子任务编号。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n (1ai109)(1 \leq a_i \leq 10^{9}),表示糖果所在的位置。保证所有 aia_i 两两不同。

输出格式

输出一个整数,表示武斯能收集的最大糖果数量。

5 0
1 2 3 4 7

3

在第一个样例中,科扎克可以选择 x=2x = 2,并在位置 1,3,71, 3, 7 收集糖果。

7 0
1 2 10 4 7 3 13

5

在第二个样例中,科扎克可以选择 x=3x = 3,并在位置 1,4,7,10,131, 4, 7, 10, 13 收集糖果。

数据范围与提示

详细子任务附加限制及分值如下表所示:

子任务 分值 附加限制
11 44 n2n \leq 2ai10a_i \leq 10
22 55 n3n \leq 3ai102a_i \leq 10^{2}
33 1212 n10n \leq 10ai102a_i \leq 10^{2}
44 2020 n103n \leq 10^{3}ai104a_i \leq 10^{4}
55 2525 n104n \leq 10^{4}ai106a_i \leq 10^{6}
66 3434 无附加限制