Задания
Версия для печати и копирования в MS Word
Тип 27 № 61407
i

Дана по­сле­до­ва­тель­ность целых чисел. Рас­сто­я­ние между эле­мен­та­ми по­сле­до­ва­тель­но­сти  — это раз­ность их по­ряд­ко­вых но­ме­ров. На­при­мер, если два эле­мен­та стоят в по­сле­до­ва­тель­но­сти рядом, рас­сто­я­ние между ними

равно 1, если два эле­мен­та стоят через один  — рас­сто­я­ние равно 2 и так далее.

Не­об­хо­ди­мо вы­брать из по­сле­до­ва­тель­но­сти три числа так, чтобы мак­си­маль­ное рас­сто­я­ние между вы­бран­ны­ми чис­ла­ми было не мень­ше 2K, а их сумма была мак­си­маль­но воз­мож­ной.

В от­ве­те за­пи­ши­те най­ден­ную сумму

Вход­ные дан­ные.

Файл А

Файл В

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число K  — па­ра­метр для опре­де­ле­ния рас­сто­я­ния, вто­рая стро­ка со­дер­жит число N  — общее ко­ли­че­ство чисел в на­бо­ре (1 < 2K < N). Каж­дая из сле­ду­ю­щих N строк со­дер­жит одно число, не пре­вы­ша­ю­щее по мо­ду­лю 107.

При­мер вход­но­го файла:

2

6

6

7

8

2

3

5

Из этого файла в со­от­вет­ствии с усло­ви­я­ми можно вы­брать числа 7, 8 и 5. Мак­си­маль­ное рас­сто­я­ние в дан­ном слу­чае равно 4 (между чис­ла­ми 7 и 5). Числа 6, 7 и 8 взять нель­зя, так как мак­си­маль­ное рас­сто­я­ние в этом слу­чае равно 2, а по усло­вию оно долж­но быть не мень­ше 4. В от­ве­те для этого при­ме­ра надо на­пи­сать число 20.

Вам даны два вход­ных файла (A и B), каж­дый из ко­то­рых имеет опи­сан­ную выше струк­ту­ру. В от­ве­те ука­жи­те два числа: сна­ча­ла тре­бу­е­мую сумму для файла A, затем  — для файла B.

 

Ответ:

Спрятать решение

Ре­ше­ние.

При­ве­дем ре­ше­ние на языке Python для файла A.

k, n, *a = map(int, open('27-A.txt'))

b = {x: a.count(x) for x in sorted(a)[::-1][:3]}

back = m = float('-inf')

for i in range(2*k, n):

back = max(back, a[i-2*k])

any_mx = max(x for x in b if (b[x] - (a[i] == x) - (back == x)) > 0)

m = max(m, back + any_mx + a[i])

print(m)

 

При­ве­дем ре­ше­ние на языке Python для файла B.

k, n, *a = map(int, open('27-B.txt'))

b = {x: a.count(x) for x in sorted(a)[::-1][:3]}

back = m = float('-inf')

for i in range(2*k, n):

back = max(back, a[i-2*k])

any_mx = max(x for x in b if (b[x] - (a[i] == x) - (back == x)) > 0)

m = max(m, back + any_mx + a[i])

print(m)

 

Ответ: 215226 23922.