6387. Острова в потоке данных
Маленькие
Дима и Петя хотят организовать соревнование. Их маленькие друзья выслали Задана
последовательность целых чисел a1,
a2, a3, ..., an.
Островом в последовательности называется набор последовательно идущих чисел,
каждый из которых больше элементов, находящихся перед и после самой
подпоследовательности. В приведенных ниже примерах каждый остров в
последовательности обозначен внизу скобкой. Скобка острова, который находится в
другом острове, находится под соответствующей скобкой.
Напишите
программу, на вход которой поступает последовательность из 15 неотрицательных
целых чисел, где каждое число отличается от предыдущего не более чем на 1, и
выводит количество островов в последовательности.
Вход. Первая
строка содержит количество тестов p
(1 ≤ p ≤ 1000).
Каждый
тест состоит из одной строки. Она содержит номер теста k, за которым следует 15 неотрицательных целых чисел, разделенных
пробелом. Первое и последнее число последовательности равны 0. Каждое число
отличается от предыдущего не более чем на 1.
Выход. Для каждого теста выведите в отдельной строке
его номер k, пробел, и количество
островов в последовательности.
Пример входа |
Пример выхода |
4 1 0 0 1 1 2 2 1 1 0 1 2 2 1 1 0 2 0 1 2 3 4 3 2 1 2 3 4 3 2 1 0 3 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 4 0 1 2 3 4 5 6 7 6 5 4 3 2 1 0 |
1 4 2 7 3 7 4 7 |
обработка
последовательностей
Количество
островов равно числу таких индексов i,
для которых ai < ai+1. Это следует
из структуры последовательности.
Реализация алгоритма
Последовательно
обрабатываем тесты.
scanf("%d",&tests);
for(i = 1; i <= tests; i++)
{
В переменной cnt
подсчитываем количество таких индексов i,
для которых prev = ai < ai+1 = cur.
cnt = 0;
Сначала в prev
читаем номер теста (больший нуля), за которым сразу идет cur = 0.
scanf("%d",&prev);
for(j = 1; j <= 15; j++)
{
scanf("%d",&cur);
if (prev <
cur) cnt++;
prev = cur;
}
Выводим ответ.
printf("%d %d\n",i,cnt);
}