Выбор оптимального пути

У Кати насыщенный день на работе. Ей надо передать 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 шт):

Автор решения: Qwertiy

Если нельзя успеть пройти всех сотрудников за это время, то это значит, что сотрудник успеет уйти.

Это не так. Достаточно успеть дойти до него с любого конца.

if (floors[leave-1] - 1 > t) {

Тут какая-то фигня проверяется.

→ Ссылка