В
Все
М
Математика
О
ОБЖ
У
Українська мова
Д
Другие предметы
Х
Химия
М
Музыка
Н
Немецкий язык
Б
Беларуская мова
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
Р
Русский язык
У
Українська література
Ф
Французский язык
П
Психология
А
Алгебра
О
Обществознание
М
МХК
В
Видео-ответы
Г
География
П
Право
Г
Геометрия
А
Английский язык
И
Информатика
Қ
Қазақ тiлi
Л
Литература
И
История
polina1362
polina1362
25.03.2022 09:55 •  Информатика

Вывод стандартный вывод стандартный вова выиграл в олимпиадах n кубков. каждый кубок либо золотой, либо серебряный. все кубки расположены в ряд один за другим. красотой расположения кубков вова называет длину максимального подотрезка из золотых кубков. вова хочет поменять местами не более одной пары кубков (не обязательно соседних) так, чтобы сделать расположение кубков максимально красивым — максимизировать длину наибольшего подотрезка из золотых кубков. вове! сообщите, какую максимальную длину наибольшего подотрезка из золотых кубков он может получить, поменяв местами не более одной пары кубков. входные данные первая строка содержит число n (2≤n≤105) — количество выигранных вовой кубков. вторая строка содержит последовательность из n символов g и s. если i-й символ равен g, то i-й кубок золотой, иначе — серебряный. выходные данные в единственной строке выведите максимальную длину наибольшего подотрезка из золотых кубков, которую вова может получить, поменяв местами не более одной пары кубков. тесты: ввод: 10 gggsgggsgg вывод: 7

Показать ответ
Ответ:
Алинаme
Алинаme
09.10.2020 12:18

Если будете сдавать в тестирующей системе, то вместо 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 (k>mxj) then mxj:=k;

       k:=0;

     end

     else

     begin

       if k>0 then p:=1;

       if k>mx then mx:=k;

     end;

   end;  

 end;

 if mx>mxj then k:=mx+1

 else k:=mxj+1;

 if k=1 then k:=0;

 writeln(k);

end.

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота