Выбор оптимального пути
У Кати насыщенный день на работе. Ей надо передать n разных договоров коллегам. Все встречи происходят на разных этажах, а между этажами можно перемещаться только по лестничным пролетам — считается, что это улучшает физическую форму сотрудников. Прохождение каждого пролета занимает ровно 1 минуту.
Сейчас Катя на парковочном этаже, планирует свой маршрут. Коллег можно посетить в любом порядке, но один из них покинет офис черезttминут. С парковочного этажа лестницы нет — только лифт, на котором можно подняться на любой этаж.
В итоге план Кати следующий:
- Подняться на лифте на произвольный этаж. Считается, что лифт поднимается на любой этаж за 0 минут.
- Передать всем коллегам договоры, перемещаясь между этажами по лестнице. Считается, что договоры на этаже передаются мгновенно.
- В первые t минут передать договор тому коллеге, который планирует уйти.
- Пройти минимальное количество лестничных пролетов. Помогите Кате выполнить все пункты ее плана.
Формат входных данных
В первой строке вводятся целые положительные числа n и t (2≤n,t≤100)— количество сотрудников и время, когда один из сотрудников покинет офис (в минутах). В следующей строке n чисел — номера этажей, на которых находятся сотрудники. Все числа различны и по абсолютной величине не превосходят 100. Номера этажей даны в порядке возрастания. В следующей строке записан номер сотрудника, который уйдет через t минут.
Формат выходных данных
Выведите одно число — минимально возможное число лестничных пролетов, которое понадобится пройти Кате.
Мы знаем, что ответ не меньше чем max − min. Если нельзя успеть пройти всех сотрудников за это время, то это значит, что сотрудник успеет уйти. Тогда выгоднее всего сразу доехать до его этажа, а потом сделать одну из двух операций — либо подняться на самый верх, а потом спуститься вниз, либо спуститься на самый низ, а потом подняться наверх. Если уезжающий сотрудник был на этаже x, то получившимися формулами будет max − min + max − x и max − min + x − min соответственно, осталось только найти минимум из этих двух величин.
Код написан, но проходит тесты не полностью. В чем может быть проблема?
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int t = scanner.nextInt();
int[] floors = new int[n];
for (int i = 0; i < n; i++) {
floors[i] = scanner.nextInt();
}
int leave = scanner.nextInt();
int res = 0;
if (floors[leave-1] - 1 > t) {
if (floors[n-1] - floors[leave-1] < floors[leave-1] - floors[0]) {
res += floors[n-1] - floors[leave-1];
}
else {
res += floors[leave-1] - floors[0];
}
}
res += floors[n-1] - floors[0];
System.out.println(res);
}
}
Ответы (1 шт):
Если нельзя успеть пройти всех сотрудников за это время, то это значит, что сотрудник успеет уйти.
Это не так. Достаточно успеть дойти до него с любого конца.
if (floors[leave-1] - 1 > t) {
Тут какая-то фигня проверяется.