Задача № 397
В файле содержится последовательность целых чисел. Её элементы могут принимать целые значения от -100 000 до 100 000 включительно. Определите количество пар последовательности, в которых только одно число отрицательно, а сумма чисел пары меньше количества чисел в последовательности, кратных 100. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
Основная волна 2026 год
Прокрути, чтобы прочитать решение задачи
Ты уверен, что хочешь это сделать?
Удачного чтения!
Решение
Код из видео
def p(x):
# Возвращает True, если число отрицательное, и False иначе.
# True в Python равен 1, а False равен 0
return x < 0
# Читаем файл
a = [int(x) for x in open('17.txt')]
# Считаем, сколько во всей последовательности чисел, кратных 100.
# Это и есть порог m, с которым дальше сравниваем суммы пар.
# Проверка x % 100 == 0 корректна для отрицательных чисел,
# но если привыкли к универсальному подходу можно написать abs
# m = len([x for x in a if abs(x) % 100 == 0])
m = len([x for x in a if x % 100 == 0])
# Сюда будем складывать суммы всех пар, подошедших под условие
ans = []
# zip(a, a[1:]) склеивает список и выдаёт пары соседних чисел:
# (a[0], a[1]), (a[1], a[2]), (a[2], a[3]), ...
for t in zip(a, a[1:]):
# map(p, t) проверяет на отрицательность оба числа пары,
# а sum(...) складывает результаты. Значит:
# 0 — оба числа неотрицательные, 1 — ровно одно отрицательное, 2 — оба.
# Нам нужно ровно одно отрицательное, поэтому сравниваем с 1.
# Второе условие: сумма пары меньше найденного количества чисел, кратных 100
if sum(map(p, t)) == 1 and sum(t) < m:
ans.append(sum(t))
# Ответ: сначала количество подходящих пар (длина списка сумм),
# затем максимальная из этих сумм
print(len(ans), max(ans))