
СРОЧНО!!!! ДАЮ 100 БАЛОВ!!! Задача 4: Марсоход Учёные рассматривают участок поверхности Марса,
который можно представить в виде последовательности точек с высотами H1, H2, ..., HN. Высота между двумя соседними точками меняется равномерно. Для исследований необходимо собрать информацию с любого отрезка участка поверхности, длина которого равна K. Для этого запланировано выбрать некоторую точку L, высадить туда марсоход и отправить его последовательно по точкам HL, HL+1, ..., HL+K. Марсоход работает от аккумулятора. На перемещение на одну единицу вверх марсоход тратит одну единицу энергии. При перемещении на одну единицу вниз марсоход накапливает одну единицу энергии. На горизонтальное перемещение энергия не тратится. Изначально у марсохода достаточно энергии, чтобы изучить любой отрезок интересующего учёных участка, а максимальный возможный запас аккумулятора не ограничен. Учёные хотят, чтобы для дальнейших исследований у марсохода осталось как можно больше энергии. Поэтому среди всех возможных вариантов им нужно найти такое L, чтобы итоговый запас аккумулятора после исследований оказался максимально возможным. Если таких L несколько, для определённости берется минимальное из возможных. Помогите учёным найти номер стартовой точки L. Входные данные В первой строке входных данных содержится целое число N (2 ≤ N ≤ 250.000) — количество точек на интересующем учёных участке поверхности Марса. Во второй строке содержится целое число K (1 ≤ K < N) — длина отрезка, который должен пройти марсоход. В следующих N строках вводятся целые числа H1, H2, ..., HN (1 ≤ Hi ≤ 109) — высоты точек. Выходные данные Выведите единственное целое число L — номер стартовой точки для марсохода. Система оценки В этой задаче 25 тестов, помимо теста из условия, каждый из которых независимо оценивается в 4 балла. Решения, правильно работающие при K = 1, будут оцениваться не менее, чем в 20 баллов. Решения, правильно работающие при N ≤ 500, будут оцениваться не менее, чем в 40 баллов. Примеры Ввод Вывод Пояснение 5 2 1 2 4 3 1 3 Марсоход можно высадить в первой, второй или третьей точке. Если марсоход высадить в первой точке, то при переходе с высоты 1 на высоту 2 его энергия уменьшится на 1. Затем при переходе с высоты 2 на высоту 4 энергия уменьшится ещё на 2, получается, что всего за этот путь заряд энергии уменьшится на 3. Если марсоход высадить во второй точке, то при переходе с высоты 2 на высоту 4 его энергия уменьшится на 2. Затем при переходе с высоты 4 на высоту 3 энергия увеличится на 1, получается, что всего за этот путь заряд энергии уменьшится на 1. Наконец, если марсоход высадить в третьей точке, его энергия сначала увеличится на 1, потом увеличится ещё на 2, то есть всего за путь увеличится на 3. Таким образом, при равном стартовом заряде батареи максимальный запас у марсохода останется, если его высадить в третьей точке.

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

Ответ:
#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



Для решения этой задачи нужно определить, какой из возможных отрезков обеспечит максимальный запас энергии у марсохода.
Идея заключается в том, чтобы рассмотреть каждую возможную стартовую точку L и вычислить энергию, которую марсоход потратит или накопит, пройдя от этой точки K шагов вправо. После этого выбрать ту точку, которая обеспечивает максимальный запас энергии.
Важно заметить, что мы можем пропустить некоторые стартовые точки, так как при движении вправо с увеличением высоты марсоход тратит энергию, а при движении вниз – накапливает. Поэтому мы будем рассматривать только те точки, которые являются локальными максимумами высот.
Пример решения на Python:
```python def find_starting_point(N, K, heights): max_energy = 0 # максимальный запас энергии start_point = 0 # номер стартовой точки
for i in range(N - K + 1): # рассматриваем только локальные максимумы высот local_max = max(heights[i:i + K])
# вычисляем энергию для данной стартовой точки energy = local_max * K - sum(heights[i:i + K])
# обновляем максимальный запас энергии и номер стартовой точки if energy > max_energy: max_energy = energy start_point = i + 1 # добавляем 1, так как индексы начинаются с 1
return start_point
# Чтение входных данных N = int(input()) K = int(input()) heights = [int(input()) for _ in range(N)]
# Вызов функции и вывод результата result = find_starting_point(N, K, heights) print(result) ```
Пример ввода и вывода:
``` 5 2 1 2 4 3 1 3 ```
Вывод:
``` 3 ```
В данном примере марсоход будет высажен в третьей точке, что обеспечит максимальный запас энергии.


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