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

Тек­сто­вый файл со­сто­ит не более чем из 106 сим­во­лов L, D и R. Опре­де­ли­те мак­си­маль­ную длину це­поч­ки вида LDRLDRLDR... (со­став­лен­ной из фраг­мен­тов LDR, по­след­ний фраг­мент может быть не­пол­ным).

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

За­да­ние 24

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

Ре­ше­ние.

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

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

k = m = 0

for i in range(len(f)):

if (f[i] == 'L' and k%3 == 0) or (f[i] == 'D' and k%3 == 1) or (f[i] == 'R' and k%3 == 2):

k += 1

m = max(m, k)

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

else: k = 0

print(m)

 

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

 

Ответ: 15.

 

 

При­ведём ре­ше­ние Ильи Ан­дри­а­но­ва на языке Python.

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

cnt = 2

maxi = 0

for i in range(0, len(s)-2, 1):

if s[i:i+3] in ('LDR', 'DRL', 'RLD'):

cnt += 1

maxi = max(maxi, cnt)

else:

cnt = 2

print(maxi)

 

При­ведём дру­гое ре­ше­ние дан­ной за­да­чи на языке 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]='L') and (count mod 3=0)) or

((s[i]='D') and (count mod 3=1)) or

((s[i]='R') and (count mod 3=2)) then begin

count := count+1;

if count > maxCount then

maxCount := count;

end

else if s[i]='L' then count:=1

else count := 0;

 

writeln(maxCount);

end.

 

При­ведём ре­ше­ние Севы Ти­мо­фе­е­ва на языке C++.

#include

#include

using namespace std;

int main () {

ifstream fin("C:/Users/Сева/Downloads/zadanie24_2.txt");

char a,b;

int s=0,f=0,y=0;

fin >> a;

while(fin >> a){

if(b=='L')y++;

if(y>0){

    if(b=='L'&&a=='D')s++;

    if(b=='D'&&a=='R')s++;

    if(b=='R'&&a=='L')s++;

    if(s>f)f=s;

        if((b=='L'&&a!='D')||(b=='D'&&a!='R')||(b=='R'&&a!='L')){

            s=1;

            y=0;

        }

    }

    b=a;

}

    cout <}

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