Задание высокого уровня сложности, на выполнение отводится 18 минут. Проверяет умение создавать программы для обработки символьной информации.
Условие задачи
Текстовый файл содержит цифры (0-9), знаки вычитания (-) и умножения (*). Необходимо найти максимальную длину непрерывной последовательности, которая представляет собой корректное арифметическое выражение с целыми неотрицательными числами. При этом:
- Два знака арифметических операций не могут стоять рядом.
- В записи чисел отсутствуют незначащие ведущие нули.
- Число ноль не имеет знака (унарная операция с нулём недопустима).
Разбор задачи
Пример строки: 7-08*9-00. Последовательность 7-08*9 некорректна, так как содержит два знака операции подряд (-*). Последовательность 08 некорректна из-за незначащего ведущего нуля. Последовательность -0 некорректна, так как это унарная операция с нулём. Однако, 0 — допустимое число.
Для решения задачи необходимо:
- Заменить все знаки вычитания (-) на звёздочки (*). Это позволит разбить строку на подстроки, используя символ * в качестве разделителя.
- Обработать подстроки (числа):
- Проверить, непустая ли подстрока.
- Проверить, не начинается ли подстрока с нуля (кроме случая, когда подстрока состоит только из нулей).
- Если подстрока удовлетворяет условиям, добавить её к текущей последовательности, добавив знак операции из исходной строки (звёздочку).
- Сравнить длину текущей последовательности с максимальной длиной, обновив её при необходимости. При этом, последовательность не должна заканчиваться знаком операции.
- Если подстрока начинается с нуля и содержит только нули, то в текущую последовательность добавляется только один ноль. В противном случае, удалить незначащие нули слева.
- Если подстрока не удовлетворяет условиям, обнулить текущую последовательность.
- Определить максимальную длину. После обработки всех подстрок, переменная, хранящая максимальную длину, будет содержать ответ.
Реализация на Python
def solve(s):
s = s.replace('-', '*')
parts = s.split('*')
current = ""
kmax = 0
for i, part in enumerate(parts):
if part and (part[0] != '0' or part == '0'):
current += part
if i < len(parts) - 1:
current += '*'
kmax = max(kmax, len(current[:-1]) if current[-1] == '*' else len(current))
elif part and part.count('0') == len(part):
current += '0'
kmax = max(kmax, len(current))
else:
current = ""
return kmax
with open("input.txt", "r") as f:
s = f.readline()
print(solve(s))
Задание 24 ЕГЭ по информатике 2025 года требует внимательного анализа условий и аккуратной реализации алгоритма обработки текста. Представленный код на Python демонстрирует одно из возможных решений. Ключевым моментом является правильная обработка нулей и предотвращение соседних знаков операций.