50 ! решите по программированию.

: одномерный японский кроссворд

не так давно петя узнал, что такое японский кроссворд. японский кроссворд — это изображение, представляемое таблицей размера a × b квадратных клеток, каждая из которых имеет либо белый, либо черный цвет. слева от строк и сверху от столбцов располагаются числа, которые шифруют данную строку или столбец. количество чисел показывает, сколько групп чёрных клеток находятся в соответствующей строке или столбце, а сами числа — сколько идущих подряд чёрных клеток содержит каждая из этих групп.

петя счел общий случай японского кроссворда слишком сложным и нарисовал строку из n клеток (то есть японский кроссворд размера 1 × n), которую он хочет зашифровать числами так же, как в японском кроссворде.

пример шифрования одной строки японского кроссворда.

петя найти числа, шифрующие нарисованную им строку кроссворда.

входные данные

в первой строке содержится целое положительное число n (1 ≤ n ≤ 100) — длина строки. во второй строке содержится строка, состоящая из n символов 'b' или 'w', ('b' соответствует черной клетке, 'w' — белой клетке в строке, нарисованной петей).

выходные данные

в первой строке должно содержаться целое неотрицательное число k — количество чисел, шифрующих строку, то есть количество групп черных клеток в строке.

во второй строке должно содержаться k целых чисел, шифрующих строку, то есть соответствующих размерам групп последовательных черных клеток в порядке слева направо.

пример:

ввод:

3

bbw

вывод:

1

2

p.s. если кому надо, то вот словесное описание решения, которое я не понимаю: в этой нужно посчитать длину каждого блока из подряд идущих чёрных клеток. делать это можно так: пройдёмся циклом с переменной i по нашей строке слева направо, если мы встретили чёрную клетку, то возьмём переменную j = i, и пока j <  n и s[j] = 'b', мы прибавляем j. далее мы добавляем в ответ длину получившегося отрезка (она равна j - i), и переприсваеваем в i значение j. после того, как цикл по i закончит выполнение, можно выводить ответ.

асимптотика такого решения — o(n) времени и памяти.

напишите программу на языке pascalabc.net (желательно) или "c", максимально понятно и просто.

лилька123 лилька123    1   29.11.2019 09:51    4

Другие вопросы по теме Информатика