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

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

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

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

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

Файл А

Файл В

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

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

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

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

 

Ответ:

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

Ре­ше­ние.

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

f = open('27-A.txt')

k = int(f.readline()) * 3

n = int(f.readline())

a = [int(i) for i in f]

maxi = -10**10

for i in range(n):

for j in range(i+1,n):

for t in range(j+1,n):

if j - i == k or t - j == k or t - i == k:

maxi = max(maxi, a[i] + a[j] + a[t])

print(maxi)

 

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

f = open('27-B.txt')

k = int(f.readline()) * 3

n = int(f.readline())

a = [int(i) for i in f]

maxi = -10**10

summa = [(a[i] + a[i + k], i, i + k) for i in range(n - k)]

summa.sort(reverse = True)

for i in range(n):

for j, t, p in summa:

if i != t and i != p:

maxi = max(maxi, a[i] + j)

break

print(maxi)

 

Ответ: 205323  20668.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

a=[int(s) for s in open('27.txt')]

k,r = a[0]*3, -10**10

a = a[2:]

p = sorted(a, reverse=True)[:3]

for i in range(len(a)-k):

t = p.copy()

if a[i] in t: t.remove(a[i])

if a[i+k] in t: t.remove(a[i+k])

r = max(r, a[i] + a[i+k] + max(t))

print(r)


Аналоги к заданию № 63043: 63076 Все