F. Козак Вус та цукерки
F. Козак Вус та цукерки
Козак Вус дуже любить стрибати, а також любить цукерки. Одного разу його занесло на числову пряму, у деяких цiлочисельних точках якої лежали цукерки (у кожнiй точцi не бiльше одної цукерки). Вус нечувано зрадiв та вирiшив зiбрати якомога бiльше цукерок. Для цього вiн може вибрати будь-яке цiле число x > 1 i початкову позицiю s (s — цiле число), пiсля чого вiн стрибками довжини x побуває у всiх точках вигляду s+kx, де k —невiд’ємне цiле число. Коли Вус потрапляє в точку, у якiй є цукерка, то вiн пiдбирає її з землi (хоча так робити не можна!). Допоможiть Вусу зiбрати якомога бiльшу кiлькiсть цукерок.
Протокол взаємодiї
Вам потрiбно реалiзувати одну функцiю:
integer solve(integer n, integer g, array of integers m)
- n—кiлькiсть цукерок;
- g —номер блока;
- m—масив iз позицiй цукерок;
- ця функцiя має повертати одне цiле число—максимальну кiлькiсть цукерок, яку може зiбрати Вус.
Формат вхiдних даних
Перший рядок мiстить два цiлi числа n та g (**1 ⩽ n ⩽ 105
; 0 ⩽ g ⩽ 6**) — кiлькiсть цукерок та номер блоку, вiдповiдно.
Другий рядок мiстить n цiлих чисел a1
; a2
; : : : ; an
(**1 ⩽ ai
⩽ 109
**) — позицiї, у яких знаходяться цукерки. Гарантується, що всi ai попарно рiзнi.
Формат вихiдних даних
У єдиному рядку буде виведена максимальна кiлькiсть цукерок, що зможе зiбрати Вус.
Примiтка
У першому прикладi Козак може вибрати x = 2 та пiдiбрати цукерки на позицiях 1; 3; 7. У другому прикладi Козак може вибрати x = 3 та пiдiбрати цукерки на позицiях 1; 4; 7; 10; 13.
Оцiнювання
- (4 бали) n ⩽ 2;
ai
⩽ 10; - (5 балiв) n ⩽ 3;
ai
⩽102
; - (12 балiв) n ⩽ 10;
ai
⩽102
; - (20 балiв) n ⩽
103
;ai
⩽104
; - (25 балiв) n ⩽
104
;ai
⩽106
; - (34 бали) без додаткових обмежень.
5 0 1 2 3 4 7
3 14528486
7 0 1 2 10 4 7 3 13
5 14528486