Задание 24. Информатика. ЕГЭ. Шастин. 30.11.2024
- Просмотры: 348
- Изменено: 1 февраля 2025
(Д. Бахтиев) Текстовый файл содержит цифры от \(1\) до \(9\) и знак арифметической операции «\(-\)» (вычитание). Определите максимальное количество символов в непрерывной последовательности, которая является корректным арифметическим выражением с целыми числами, чьё значение превышает \(-20~000\) (минус двадцать тысяч). Запрещается отрывать цифры от чисел, но разрешается брать их без знака. Например, в строке \(-23-456-789\) нельзя взять выражение \(-456-78\), но можно взять \(23-456\). В ответе укажите количество символов.
Решение:
Python
from re import findall
base = ''
s = open(base + '24.txt').readline().strip()
arr = list(findall(r'-[1-9]+(?:-[1-9]+)*', s))
ans = []
for expr in arr:
tmp = [(int(x), len(x)) for x in expr.split('-') if x]
pref = [0] * (len(tmp) + 1)
pref_len = [0] * (len(tmp) + 1)
b = 0
b1 = 1
for i in range(len(tmp)):
pref[i + 1] = pref[i] + tmp[i][0]
pref_len[i + 1] = pref_len[i] + tmp[i][1]
if pref[i + 1] < 20_000:
ans.append(pref_len[i+1] + (i + 1))
else:
while pref[i+1] - pref[b] >= 20_000:
b += 1
ans.append(pref_len[i+1] - pref_len[b] + (i + 1 - b))
while tmp[b1 - 1][0] - (pref[i + 1] - pref[b1]) < -20_000:
b1 += 1
ans.append(pref_len[i+1] - pref_len[b1] + (i + 1 - b1) + tmp[b1 - 1][1])
print(max(ans))
Ответ: \(1095\)