
Информатика 40б Скайраннингом называется бег в горной местности по неподготовленным трассам,
которые обязательно проходят через одну или несколько вершин. Важной характеристикой маршрута в скайраннинге является набор высоты, который равен сумме перепада высот на всех участках подъема. Например, если на маршруте имеется три участка подъема, причем конечная точка каждого участка выше начальной на 200 метров, то набор высоты на маршруте будет равен 600 метров. Кроме того, весь маршрут может быть поделен на высотные зоны. В нашей задаче мы будем рассматривать две высотные зоны: ниже 2000 метров и выше 2000 метров. В этом случае все параметры, в том числе и набор высоты, рассчитываются для разных высотных зон. Рассмотрим такой пример. Пусть профиль трассы содержит семь точек с высотами 1200, 2300, 2100, 2900, 3100, 1000, 1800 метров. На этой трассе есть четыре участка подъема: (1200; 2300), (2100; 2900), (2900; 3100), (1000;1800). На первом участке подъема 800 метров набирается в первой высотной зоне и 300 метров во второй. На втором и третьем участках набирается по 800 и 200 метров соответственно во второй высотной зоне. На четвертом участке набирается 800 метров в первой зоне. Таким образом в первой высотной зоне набирается 1600 метров, а во второй — 1300 метров. Ваша задача — написать программу, которая по заданному профилю трассы найдет набор высоты для двух высотных зон: ниже 2000 и выше 2000 метров. Формат входных данных На вход в первой строке подается одно натуральное число nn — количество точек в профиле высоты. 2\leq n\leq 1002≤n≤100. Во второй строке через пробел записаны nn целых чисел a_1,\ldots,a_na 1 ,…,a n , задающих высоту каждой точки. -416\leq a_i\leq8848−416≤a i ≤8848. Формат выходных данных Программа должна вывести в одной строке через пробел два числа — набор высоты для первой и второй высотной зоны. Методика проверки Программа проверяется на 10 тестах. Прохождение каждого теста оценивается в 2 балла. Тесты из условия задачи при проверке не используются. Sample Input 1: 7 1200 2300 2100 2900 3100 1000 1800 Sample Output 1: 1600 1300 Sample Input 2: 5 2000 2675 2675 1215 -416 Sample Output 2: 0 675 Напишите программу. Тестируется через stdin → stdout Time Limit: 1 секунда Memory Limit: 256 MB укажите на каком языке писали

Ответы на вопрос

Ответ:
Объяснение:
#include <iostream>
int main() {
int arr[100], n, first = 0, second = 0;
std::cin >> n;
for (int i = 0; i < n; ++i)
std::cin >> arr[i];
for (int i = 1; i < n; ++i) {
const int diff = arr[i] - arr[i - 1];
if (diff > 0)
if (arr[i] <= 2000)
first += diff;
else if (arr[i - 1] >= 2000)
second += diff;
else {
first += 2000 - arr[i - 1];
second += arr[i] - 2000;
}
}
std::cout << first << ' ' << second;
return 0;
}



Программу можно написать на языке Python. Вот решение задачи:
python# Считываем количество точек в профиле высоты
n = int(input())
# Считываем высоты точек и инициализируем переменные для двух высотных зон
heights = list(map(int, input().split()))
below_2000 = 0
above_2000 = 0
# Проходим по каждой точке и вычисляем набор высоты для каждой зоны
for i in range(n - 1):
if heights[i] < 2000 and heights[i + 1] < 2000:
below_2000 += abs(heights[i + 1] - heights[i])
elif heights[i] >= 2000 and heights[i + 1] >= 2000:
above_2000 += abs(heights[i + 1] - heights[i])
else:
# Точка пересечения высотных зон
diff = abs(heights[i + 1] - heights[i])
if heights[i] < heights[i + 1]:
above_2000 += diff - (heights[i + 1] - 2000)
below_2000 += heights[i + 1] - 2000
else:
below_2000 += diff - (2000 - heights[i + 1])
above_2000 += 2000 - heights[i + 1]
# Выводим результаты
print(below_2000, above_2000)
Этот код считывает количество точек и высоты, а затем проходит по каждой точке, вычисляя набор высоты для двух высотных зон: ниже 2000 метров и выше 2000 метров. Результаты выводятся в одной строке через пробел.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







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