(Э. Носиров) Задание выполняется с использованием файла 24.txt.
Текстовый файл состоит из заглавных букв латинского алфавита A, B, C, D и E. Определите максимальное количество символов в непрерывной последовательности, содержащей ровно 100 букв A и не более 80 букв B.
В ответе укажите количество символов.
Для выполнения задания напишите программу.
Решение
Окно
🔹 Шаг 1. Читаем файл в строку s и задаём левую границу окна l, счётчики букв A…
s = open("24.txt").read()
l = ca = cb = mx = 0
📌 Читаем файл в строку s и задаём левую границу окна l, счётчики букв A и B и переменную mx для ответа.
🔹 Шаг 2. Обходим строку слева направо: на каждом шаге увеличиваем счётчик A или…
for r in range(len(s)):
if s[r] == "A":
ca += 1
elif s[r] == "B":
cb += 1
📌 Обходим строку слева направо: на каждом шаге увеличиваем счётчик A или B, если очередной символ — соответствующая буква.
🔹 Шаг 3. Сдвигаем l вправо, пока в окне больше 100 букв A или больше 80 букв B
while ca > 100 or cb > 80:
if s[l] == "A":
ca -= 1
elif s[l] == "B":
cb -= 1
l += 1
📌 Сдвигаем l вправо, пока в окне больше 100 букв A или больше 80 букв B: при выходе символа уменьшаем нужный счётчик.
🔹 Шаг 4. Если в окне ровно 100 букв A (B уже не больше 80), обновляем mx
if ca == 100:
mx = max(mx, r - l + 1)
📌 Если в окне ровно 100 букв A (B уже не больше 80), обновляем mx — длиной текущего фрагмента от l до r.
🔹 Шаг 5. Жми RUN
print(mx)
📌 Жми RUN — в выводе будет 568 (максимальное количество символов в подходящей непрерывной последовательности).
✅ Ответ: 568
🔹 Полный код
s = open("24.txt").read()
l = ca = cb = mx = 0
for r in range(len(s)):
if s[r] == "A":
ca += 1
elif s[r] == "B":
cb += 1
while ca > 100 or cb > 80:
if s[l] == "A":
ca -= 1
elif s[l] == "B":
cb -= 1
l += 1
if ca == 100:
mx = max(mx, r - l + 1)
print(mx)