Прохожу контест от Тинькоффа. По тестам показывает, что это частичное условие. В чем может быть проблема?
Прохожу контест от Тинькоффа. По тестам показывает, что это частичное решение. В чем может быть проблема? Снизу представлена задача с тренировочного Тинькофф контеста.
Мои рассуждения таковы : Если нельзя успеть пройти всех сотрудников за время t, при котором мы успеваем или с первого этажа или с последнего этажа дойти до сотрудника, который уходит. Тогда выгоднее всего сразу доехать до этажа, уходящего сотрудника, а потом сделать одну из двух операций — либо подняться на самый верх, а потом спуститься вниз, либо спуститься на самый низ, а потом подняться наверх. Если уезжающий сотрудник был на этаже x, то получившимися формулами будет max − min + max − x и max − min + x − min соответственно, осталось только найти минимум из этих двух величин.
Кате надо передать n разных договоров коллегам. Все встречи происходят на разных этажах, а между этажами можно перемещаться только по лестничным пролетам — считается, что это улучшает физическую форму сотрудников. Прохождение каждого пролета занимает ровно 1 минуту. Сейчас Катя на парковочном этаже, планирует свой маршрут. Коллег можно посетить в любом порядке, но один из них покинет офис через t минут. С парковочного этажа лестницы нет — только лифт, на котором можно подняться на любой этаж.
В итоге план Кати следующий:
Подняться на лифте на произвольный этаж. Считается, что лифт поднимается на любой этаж за 0 минут. Передать всем коллегам договоры, перемещаясь между этажами по лестнице. Считается, что договоры на этаже передаются мгновенно. В первые t минут передать договор тому коллеге, который планирует уйти. Пройти минимальное количество лестничных пролетов. Помогите Кате выполнить все пункты ее плана.
Формат входных данных:
В первой строке вводятся целые положительные числа n и t (2≤n,t≤100) — количество сотрудников и время, когда один из сотрудников покинет офис (в минутах). В следующей строке n чисел — номера этажей, на которых находятся сотрудники. Все числа различны и по абсолютной величине не превосходят 100. Номера этажей даны в порядке возрастания. В следующей строке записан номер сотрудника, который уйдет через t минут.
Формат выходных данных:
Выведите одно число — минимально возможное число лестничных пролетов, которое понадобится пройти Кате.
Замечание:
- В первом примере времени достаточно, чтобы Катя поднялась по этажам по порядку.
- Во втором примере Кате понадобится подняться к уходящему сотруднику, а потом пройти всех остальных — например, в порядке {1,2,3,4,6}
Примеры данных
Пример 1
Ввод
5 5
1 4 9 16 25
2
Вывод
24
Пример 2 Ввод
6 4
1 2 3 6 8 25
5
Вывод
31
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 leavingPerson = scanner.nextInt();
int time = 0;
int timeFromLastFloor = floors[n - 1] - floors[leavingPerson - 1];
int timeFromFirstFloor = floors[leavingPerson - 1] - floors[0];
if (t < timeFromFirstFloor || t > timeFromLastFloor) {
if (timeFromLastFloor < timeFromFirstFloor) {
time += timeFromLastFloor;
} else {
time += floors[leavingPerson - 1] - floors[0];
}
}
time += floors[n - 1] - floors[0];
System.out.println(time);