вывод стандартный вывод стандартныйВова выиграл в олимпиадах n кубков. Каждый кубок

Вывод стандартный
вывод стандартный

Вова выиграл в олимпиадах n кубков. Каждый кубок или золотой, или серебряный. Все кубки размещены в ряд один за другим. Красой расположения кубков Вова именует длину наибольшего подотрезка из золотых кубков. Вова желает поменять местами не более одной пары кубков (не непременно соседних) так, чтоб сделать расположение кубков очень красивым максимизировать длину наивеличайшего подотрезка из золотых кубков. Помогите Вове! Сообщите, какую наивысшую длину величайшего подотрезка из золотых кубков он может получить, поменяв местами не более одной пары кубков. Входные данные 1-ая строчка содержит число n (2n105) количество выигранных Вовой кубков. 2-ая строка содержит последовательность из n символов G и S. Если i-й знак равен G, то i-й кубок золотой, по другому серебряный. Выходные данные В единственной строке выведите максимальную длину величайшего подотрезка из золотых кубков, которую Вова может получить, поменяв местами не более одной пары кубков.



испытания:
ввод:
10
GGGSGGGSGG

вывод:
7

Задать свой вопрос
1 ответ

Если будете сдавать в тестирующей системе, то заместо string, лучше использовать массив char - работает прытче.

var n,i,k,p,mx,mxj: integer;

   s: array[1..100000] of char;

begin

 readln(n);

 for i:=1 to n do read(s[i]);

 k:=0; p:=0;

 mx:=0; mxj:=0;

 for i:=1 to n do

 begin

   if s[i]='G' then k:=k+1

   else

   begin

     if p=1 then

     begin

       p:=0;

       if s[i-1]='G' then  

       if (kgt;mxj) then mxj:=k;

       k:=0;

     end

     else

     begin

       if kgt;0 then p:=1;

       if kgt;mx then mx:=k;

     end;

   end;  

 end;

 if mxgt;mxj then k:=mx+1

 else k:=mxj+1;

 if k=1 then k:=0;

 writeln(k);

end.


Serebrova Uljana
var n,i,k,p,mk,mx: integer; s: array[1..100000] of char;begin readln(n); for i:=1 to n do read(s[i]); k:=0; p:=0; mx:=0; mk:=0; for i:=1 to n do begin if s[i]='G' then k:=k+1 else begin if p=1 then begin if s[i-1]='G' then begin if (k>mx) then mx:=k; k:=k-mk; mk:=k; end else begin k:=0; mk:=0; p:=0; end; end else if k>0 then begin p:=1; mk:=k; if k>mx then mx:=k; end; end; end; k:=max(k,mx)+1; if k=1 then k:=0; writeln(k);end.
Максимка Козаков
Это исправленный вариант. В прошлом не учитывалось, если самая длинноватая последовательность в конце.
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт