ЕГЭ, ОГЭ, программирование и робототехника в Калининграде

№ 24033. Основная волна

Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.

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

with open('2433.txt', 'r') as f:
    data = f.readline()

n = len(data)
left = 0
count_W = 0
count_2025 = 0
min_len = float('inf')

for right in range(n):
    # 1. Добавляем новый символ в окно
    if data[right] == 'W':
        count_W += 1
    # Проверяем, не закончилась ли подстрока "2025" на позиции right
    if right >= 3 and data[right - 3:right + 1] == "2025":
        count_2025 += 1

    # 2. Если W слишком много, сжимаем окно слева
    while count_W > 90:
        if data[left] == 'W':
            count_W -= 1
        if left <= right - 3 and data[left:left + 4] == "2025":
            count_2025 -= 1
        left += 1

    # 3. Если условие выполнено, пробуем минимизиров длину
    if count_W == 90 and count_2025 >= 110:
        # Сдвигаем left влево, пока не упрёмся в W или не нарушится условие по "2025"
        while count_W == 90 and count_2025 >= 110:
            min_len = min(min_len, right - left + 1)

            # Если следующий символ слева - W, дальше сдвигать нельзя
            if data[left] == 'W':
                break

            # Убираем не-W символ и обновляем счётчик "2025" если нужно
            if left <= right - 3 and data[left:left + 4] == "2025":
                count_2025 -= 1
            left += 1

print(min_len)
Разберём это задание на бесплатном пробном занятии

Преподаватель покажет, как решать такие задачи, и подскажет, с чего начать подготовку. Группы до 8 человек, очно в Калининграде и онлайн.

Записаться на пробное занятие