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

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

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

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

#== Скользящее окно ==#
with open('2428.txt') as file:
    data = file.readline()

left = 0

count_y = 0
count_2025 = 0

max_len = 0

for right in range(len(data)):

    # Добавляем символ справа
    if data[right] == 'Y':
        count_y += 1

    # Проверяем новую подстроку 2025
    if right >= 3 and data[right-3:right+1] == '2025':
        count_2025 += 1

    # Если Y стало слишком много — уменьшаем окно
    while count_y > 80:

        # Удаляем Y слева
        if data[left] == 'Y':
            count_y -= 1

        # Удаляем 2025, если она начиналась в left
        if data[left:left+4] == '2025':
            count_2025 -= 1

        left += 1

    # Проверяем подходящее окно
    if count_y == 80 and count_2025 >= 90:
        max_len = max(max_len, right - left + 1)

print(max_len)

#== Метод поиска границ ==#
with open('2428.txt') as file:
    data = file.readline()

y_pos = []

for i in range(len(data)):
    if data[i] == 'Y':
        y_pos.append(i)

max_len = 0

for i in range(len(y_pos) - 79):

    first = y_pos[i]
    last = y_pos[i + 79]

    # левая граница
    if i == 0:
        left = 0
    else:
        left = y_pos[i - 1] + 1

    # правая граница
    if i + 80 >= len(y_pos):
        right = len(data) - 1
    else:
        right = y_pos[i + 80] - 1

    substr = data[left:right + 1]

    if substr.count('2025') >= 90:
        max_len = max(max_len, len(substr))

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

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

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