πЕГЭ · ИИ-репетитор12 предметов · задания ФИПИ
Главная → Информатика → Задания №24 → Задание i24-06

Задание №24 ЕГЭ Информатика с ответом и решением

Ответ: 24

Условие

Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальную длину цепочки вида ABABAB... (составленной из фрагментов AB, последний фрагмент может быть неполным).

Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.

Файл с исходными данными к этому заданию в открытом банке не опубликован — разбирай подход по официальному решению ниже.

Подсказки — как подойти к решению

  1. Ищем самую длинную цепочку вида ABAB…, где последний фрагмент может быть неполным. Двигайся по строке слева направо и накапливай длину текущей правильной цепочки.
  2. Держи счётчик длины k и помни, какой символ обязан идти следующим: он определяется чётностью k — за A идёт B, за B снова A.
  3. Если очередной символ не совпадает с ожидаемым, цепочка обрывается, но символ A может начинать её заново — этот случай легко потерять. Не забудь, что в конце строки цепочка может закончиться одиночной A: последний фрагмент AB тоже разрешено считать неполным.

Решение

Приведём решение Николая Чуркина (Тимашевск) на языке Python.

f = open('24.txt').readline()

k = m = 0

for i in range(len(f)):

if (f[i] == 'A' and k%2 == 0) or (f[i] == 'B' and k%2 == 1):

k += 1

m = max(m, k)

elif f[i] == 'A': k = 1

else: k = 0

print(m)

В результате работы данного алгоритма при вводе данных из файла в условии получаем ответ — 24.

Ответ: 24.

Приведём решение Бориса Савельева на языке Python.

f = open('zadanie24_1.txt').readline()

f = f.replace('AB','*')

cnt = 0

maxi = 0

for i in range (0,len(f)):

if f[i] == '*':

cnt += 1

elif f[i] == 'A':

cnt = cnt*2+1

maxi = max(cnt,maxi)

cnt = 0

else:

maxi = max(maxi,cnt*2)

cnt = 0

print(maxi)

Приведём решение Артёма Гридина на языке Python.

import re

s = open('zadanie24_1.txt').readline()

arr = list(zip( * (re.findall(r'((AB)+)', s) + (re.findall(r'((AB)+A)', s)))))[0]

print(len(max(arr)))

Приведём другое решение данной задачи на языке Pascal.

Для решения данной задачи будем посимвольно считывать текстовый файл. Объявим переменные: s — строка для работы с символами из файла, maxCount — максимальная длина последовательности, count — временное хранение длины последовательности, i — переменная для перебора всех символов. Алгоритм будет сравнивать значения на трех позициях, и если символы будут удовлетворять нужным условиям, то значение счетчика будет увеличиваться на 1.

Приведём решение данной задачи на языке Pascal.

begin

var s: string;

var i, count, maxCount: integer;

assign(input, '24.txt');

readln(s);

count:=0;

maxCount:=0;

for i:=1 to Length(s) do

if ((s[i]='A') and (count mod 2=0)) or

((s[i]='B') and (count mod 2=1)) then begin

count := count+1;

if count > maxCount then

maxCount := count;

end

else if s[i]='A' then count:=1 else count:=0;

writeln(maxCount);

end.

Приведём решение Сергея Донец на языке PascalABC.NET.

begin

ReadAllText('24.txt').Matches('(AB)+A?').Max(m -> m.Length).Print;

end.

Типичные ошибки

Решить это задание в тренажёре

В тренажёре: подсказки по шагам, разбор твоей ошибки ИИ-репетитором (он не даёт готовый ответ), повторение ошибок по интервалам и общий прогресс. Все задания №24 по информатике