Дана последовательность целых чисел. Расстояние между элементами последовательности — это разность их порядковых номеров. Например, если два элемента стоят в последовательности рядом, расстояние между ними равно 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.