Алгоритм решения задания 14. Часть 1
Учимся решать 15 задания первого типа
Читать
Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле минимальное количество идущих подряд символов, среди которых подстрока 2025 встречается не менее 110 раз и при этом содержится ровно 90 букв W. В ответе запишите число – количество символов в найденной последовательности.
Правильный ответ:
780
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)
