Задания
Версия для печати и копирования в MS Word

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

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

За­да­ние 24

Спрятать решение

Ре­ше­ние.

При­ведём ре­ше­ние Ни­ко­лая Чур­ки­на (Ти­ма­шевск) на языке 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.

Раздел кодификатора ФИПИ: