ЕГЭ Информатика 2025: Решение задачи 24 (максимальная длина выражения)

Задание высокого уровня сложности, на выполнение отводится 18 минут. Проверяет умение создавать программы для обработки символьной информации.

Условие задачи

Текстовый файл содержит цифры (0-9), знаки вычитания (-) и умножения (*). Необходимо найти максимальную длину непрерывной последовательности, которая представляет собой корректное арифметическое выражение с целыми неотрицательными числами. При этом:

  • Два знака арифметических операций не могут стоять рядом.
  • В записи чисел отсутствуют незначащие ведущие нули.
  • Число ноль не имеет знака (унарная операция с нулём недопустима).

Разбор задачи

Пример строки: 7-08*9-00. Последовательность 7-08*9 некорректна, так как содержит два знака операции подряд (-*). Последовательность 08 некорректна из-за незначащего ведущего нуля. Последовательность -0 некорректна, так как это унарная операция с нулём. Однако, 0 — допустимое число.

Для решения задачи необходимо:

  1. Заменить все знаки вычитания (-) на звёздочки (*). Это позволит разбить строку на подстроки, используя символ * в качестве разделителя.
  2. Обработать подстроки (числа):

    • Проверить, непустая ли подстрока.
    • Проверить, не начинается ли подстрока с нуля (кроме случая, когда подстрока состоит только из нулей).
    • Если подстрока удовлетворяет условиям, добавить её к текущей последовательности, добавив знак операции из исходной строки (звёздочку).
    • Сравнить длину текущей последовательности с максимальной длиной, обновив её при необходимости. При этом, последовательность не должна заканчиваться знаком операции.
    • Если подстрока начинается с нуля и содержит только нули, то в текущую последовательность добавляется только один ноль. В противном случае, удалить незначащие нули слева.
    • Если подстрока не удовлетворяет условиям, обнулить текущую последовательность.
  3. Определить максимальную длину. После обработки всех подстрок, переменная, хранящая максимальную длину, будет содержать ответ.

Реализация на 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 демонстрирует одно из возможных решений. Ключевым моментом является правильная обработка нулей и предотвращение соседних знаков операций.

Что будем искать? Например,программа