информатика 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
укажите на каком языке писали
Answers & Comments
Ответ:
Объяснение:
#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;
}
c = ''
a = 0
b = 0
d = 0
s = []
r = []
for i in range(len(st)+1):
if len(st) == i or st[i] == " " :
s.append(int(c))
c = ''
else:
c += st [i]
a = s[0]
b = s[1]
for i in range(a-1, 0,-1):
d = i*b
for o in range(1, b):
if o == b-1:
for j in range(1, a-i):
r.append(d+o*(a-i)+j)
else:
r.append(d+o*(a-i))
r.append(d)
for i in range(b -1, 0,-1):
d = i*a
for o in range(1, a):
if o == a-1:
r.append(d+o*(b-i)+j)
else:
r.append(d+o*(b-i))
r.append(d)
r = sorted(r)
temp = []
for x in r:
if x not in temp:
temp.append(x)
r = temp
for i in r:
print(i, end = ' ')