Дана последовательность целых чисел. Расстояние между элементами последовательности — это разность их порядковых номеров. Например, если два элемента стоят в последовательности рядом, расстояние между ними
Необходимо выбрать из последовательности три числа так, чтобы максимальное расстояние между выбранными числами было
В ответе запишите найденную сумму.
Входные данные.
Первая строка входного файла содержит целое
Пример входного файла:
1
5
6
7
8
2
3
Из этого файла в соответствии с условиями можно выбрать числа
Вам даны два входных файла
Ответ:
Приведем решение на языке 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(3*k, n):
back = max(back, a[i-3*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 для файла В .
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(3*k, n):
back = max(back, a[i-3*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)
Ответ: 214796 21506.
Приведем решение Борис М. на языке Python.
def calc_sum(arr, N, K):
# максимальная сумма тройки чисел
maxsum = min(arr)*3
# максимальное число сверху от выборки - участвует в расчете суммы троек
back = arr[0]
# максимальное число в середине выборки - второе число выборки
m2 = max(arr[1:3*K])
# курсор - третье число выборки, начальное положение 3*К
for i in range(3*K, N):
# первое число выборки - назад на 3К от курсора
m1 = arr[i-3*K]
# пересчитать максимальное число сверху от выборки
back = max(back, m1)
# если первое число достигло второго
if m1 == m2:
# сдинуть второе число - максимальное число в середине выборки
m2 = max(arr[1+i-3*K:i])
# третье число выборки - курсор
m3 = arr[i]
# сумма тройки чисел - вместо первого берется макс. сверху
s = back + m2 + m3
# пересчитать максимальную сумму
maxsum = max(maxsum, s)
# если третье число выборки больше второго
if m3 > m2:
# обновить второе число выборки
m2 = m3
return maxsum
files = ['27-A.txt', '27-B.txt']
for name in files:
K, N, *arr = map(int, open(name))
print(name, '->', calc_sum(arr, N, K))

