По каналу связи передаётся последовательность целых чисел – показания прибора. В течение N мин. (N – натуральное число) прибор ежеминутно регистрирует значение напряжения (в условных единицах) в электрической сети и передаёт его на сервер.
Определите три таких переданных числа, чтобы между моментами передачи любых двух из них прошло не менее K мин., а сумма этих трёх чисел была максимально возможной. Запишите в ответе найденную сумму.
Входные данные
Даны два входных файла (файл A и файл B), каждый из которых в первой строке содержит натуральное число K – минимальное количество минут, которое должно пройти между моментами передачи показаний, а во второй – количество переданных показаний N (1 ≤ N ≤ 10 000 000, N > K). В каждой из следующих N строк находится одно целое число, по модулю не превышающее 10 000 000, которое обозначает значение напряжения в соответствующую минуту.
Запишите в ответе два числа: сначала значение искомой величины для файла А, затем – для файла B.
Типовой пример организации данных во входном файле
2
6
150
–150
20
–200
–300
0
При таких исходных данных искомая величина равна 170 – это сумма значений, зафиксированных на первой, третьей и шестой минутах измерений.
Типовой пример имеет иллюстративный характер. Для выполнения задания используйте данные из прилагаемых файлов.
Предупреждение: для обработки файла B не следует использовать переборный алгоритм, вычисляющий сумму для всех возможных вариантов, поскольку написанная по такому алгоритму программа будет выполняться слишком долго.
(для файла A) (для файла B)
Демонстрационный вариант ЕГЭ 2024 – задание №27
Решение:
для файла A — полный перебор
|
1 2 3 4 5 6 7 8 9 10 11 |
f = open('ege-inf-demo2024-z27_A_2024.txt') k = int(f.readline()) n = int(f.readline()) a = [int(x) for x in f.readlines()] mx = -10**10 for i1 in range(n): for i2 in range(i1+k, n): for i3 in range(i2+k, n): if i2-i1>=k and i3-i2>=k: mx = max(mx, a[i1] + a[i2] + a[i3]) print(mx) |
для файла A или B
|
1 2 3 4 5 6 7 8 9 10 |
f = open('ege-inf-demo2024-z27_B_2024.txt') k = int(f.readline()) n = int(f.readline()) a = [int(x) for x in f.readlines()] max1 = max2 = max3 = -10**10 for i in range(k*2, n): max1 = max(max1, a[i - k * 2]) max2 = max(max2, a[i - k] + max1) max3 = max(max3, a[i] + max2) print(max3) |
Ответ:
189536 (для файла A)
17210 (для файла B)
