Задание 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\)