Найти в Дзене

🔍 Задача 24 c реального ЕГЭ. Решение доступно каждому.

В 2025 году в ЕГЭ по информатике появилась новая формулировка задачи 24, которая требует не просто перебора, а анализа всех возможных подстрок фиксированной длины. Условие звучит так: Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых подстрока 2025 встречается не менее 90 раз и при этом содержится ровно 80 букв Y.
В ответе запишите число — количество символов в найденной последовательности. Это это задача на двойной цикл: перебор всех возможных отрезков текста и проверка условия. Метод двойного цикла — это прямой перебор всех подстрок текста: Если оба выполнены — запоминаем длину r - l + 1, и ищем максимум. Этот метод: s = open('24_23281.txt').readline() Что делает: читает весь файл в одну строку s.
Файл 24_23281.txt — текстовый, содержит только цифры и заглавные буквы (включая Y).
readline() — безопасно, потому что файл состоит из одной строки. m = 0 Что делает: п
Оглавление

В 2025 году в ЕГЭ по информатике появилась новая формулировка задачи 24, которая требует не просто перебора, а анализа всех возможных подстрок фиксированной длины.

Условие звучит так:

Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле максимальное количество идущих подряд символов, среди которых подстрока 2025 встречается не менее 90 раз и при этом содержится ровно 80 букв Y.
В ответе запишите число — количество символов в найденной последовательности.

Это это задача на двойной цикл: перебор всех возможных отрезков текста и проверка условия.

📌 Суть метода двойного цикла

Метод двойного цикла — это прямой перебор всех подстрок текста:

  • внешний цикл — начало подстроки (l),
  • внутренний цикл — конец подстроки (r),
  • для каждой пары (l, r) мы извлекаем подстроку s[l:r+1],
  • и проверяем два условия:подстрока.count('2025') >= 90,
    подстрока.count('Y') == 80.

Если оба выполнены — запоминаем длину r - l + 1, и ищем максимум.

Этот метод:

  • прост в понимании,
  • гарантирует полный перебор,
  • двойной цикл с оптимизацией break проходит за секунды).

💻 Код решения

-2

🔹 Шаг 1: чтение файла

s = open('24_23281.txt').readline()

Что делает: читает весь файл в одну строку s.
Файл 24_23281.txt — текстовый, содержит только цифры и заглавные буквы (включая Y).
readline() — безопасно, потому что файл состоит из одной строки.

🔹 Шаг 2: инициализация максимума

m = 0

Что делает: переменная m хранит текущую максимальную длину подходящей подстроки.
Начинаем с 0 — если не найдётся ни одной подходящей подстроки, ответ будет 0 (но в задаче он есть).

🔹 Шаг 3: внешний цикл — начало подстроки

for l in range(0, len(s)):

Что делает: перебирает все возможные позиции начала подстроки — от 0 до конца строки.
l — индекс левого края подстроки.

-3

Запись на занятия здесь: https://t.me/nka39

🔹 Шаг 4: внутренний цикл — конец подстроки

for r in range(l + m, len(s)):

Что делает: перебирает позиции конца подстроки — но не с l, а с l + m.
Это ключевая оптимизация: если уже найдена подстрока длины m, то нам
неинтересны подстроки короче m,
поэтому начинаем с r = l + m, чтобы сразу рассматривать только потенциально лучшие варианты.
✅ Без этого — время работы растёт

🔹 Шаг 5: извлечение подстроки

c = s[l:r+1]

Что делает: берёт подстроку от l до r включительно.
В Python срез s[l:r+1] — это символы с индексами l, l+1, ..., r.

🔹 Шаг 6: проверка условия на Y

if c.count('Y') > 80:

break

Что делает: если в текущей подстроке уже больше 80 букв Y, то расширение подстроки вправо только увеличит их количество (мы добавляем символы справа, и Y не исчезнет).
Значит, для этого l дальнейшие r уже не дадут решения — можно прервать внутренний цикл.
⚠️ Это — главная оптимизация, делающая задачу решаемой на экзамене.

🔹 Шаг 7: проверка основного условия

elif c.count('2025') >= 90 and c.count('Y') == 80:

m = max(m, len(c))

Что делает: c.count('2025') >= 90 — подстрока содержит не менее 90 вхождений 2025, c.count('Y') == 80 — ровно 80 букв Y,
если оба условия выполнены — обновляем m на максимум между текущим m и длиной подстроки len(c).
✅ Обратите внимание: используется elif, а не if — потому что если Y > 80, мы уже вышли через break.
Значит, здесь Y ≤ 80, и мы проверяем точное равенство.

🔹 Шаг 8: вывод результата

print(m)

Выводит максимальную длину подходящей подстроки.

🧮 Как работает алгоритм на практике?

Представьте, что в тексте есть участок длиной 1200 символов, где:

  • 2025 встречается 92 раза,
  • Y — ровно 80 раз.

Алгоритм:

  1. При l = 100 начинает расширять подстроку.
  2. При r = 1299 получает c = s[100:1300].
  3. Проверяет: c.count('Y') = 80, c.count('2025') = 92 → условие выполнено.
  4. Обновляет m = 1200.
  5. Дальше для этого l r начинается с 100 + 1200 = 1300, и при r = 1300 уже c.count('Y') > 80 → break.

Для других l — либо Y набирается быстрее, либо 2025 не достигает 90.

Итог: m = 1200 — ответ.

✅ Почему этот метод правилен?

  • Он перебирает все возможные подстроки, но с двумя оптимизациями:

r начинается с l + m — пропускаем заведомо короткие,
break при Y > 80 — пропускаем заведомо неподходящие продолжения.

  • Условия проверяются точно: count('2025') и count('Y') — встроенные методы Python, работающие за линейное время от длины подстроки, но благодаря break общее время остаётся приемлемым.

📌 Итог

Hешение — это классический двойной цикл с двумя ключевыми оптимизациями, который:

  • гарантирует нахождение глобального максимума,
  • работает за разумное время на экзамене,
  • легко понимается и воспроизводится.

Оно полностью соответствует условию задачи и является эталонным для этого прототипа.

➕ Есть и другие прототипы задачи 24

Этот вариант — один из нескольких.
В других могут быть:

  • поиск подстрок с фиксированным количеством различных символов,
  • анализ последовательностей с ограничением на частоту,
  • использование скользящего окна вместо двойного цикла.

О них — в следующих материалах.

Если Вам информация была для Вас полезна, то можно поддержать автора, нажав на кнопку "Поддержать".

Подпишитесь на канал и научитесь решать все задания ЕГЭ по информатике!

Удачи на экзамене!

Записаться ко мне на занятия можно тут https://t.me/nka39