Codeforces Round 270 |
---|
Закончено |
Один из способов придумывания задач — наблюдать за процессами в реальной жизни. Можно выбрать какую-то реально существующую ситуацию из жизни, формализовать ее и так получить новую задачу.
Представим жизненную ситуацию: стоит много людей, все ждут лифта. Каждый человек хочет попасть на какой-то конкретный этаж. Мы можем формализовать это следующим образом. Пусть n людей стоит на первом этаже, и i-й человек хочет попасть на fi-й этаж. К сожалению, в здании только один лифт, способный вместить k человек (иными словами, одновременно лифт могут использовать не более k человек). Изначально лифт расположен на первом этаже. Лифту требуется |a - b| секунд для того, чтобы доехать от a-го до b-го этажа (время, необходимое пассажирам лифта на вход и выход, не учитывается).
Какое минимальное количество секунд необходимо для того, чтобы развезти всех людей по необходимым этажам и затем вернуть лифт на первый этаж?
В первой строке записано два целых числа n и k (1 ≤ n, k ≤ 2000) — количество людей и максимальная вместимость лифта.
В следующей строке записано n целых чисел: f1, f2, ..., fn (2 ≤ fi ≤ 2000), где fi обозначает этаж, до которого хочет доехать i-й человек.
Выведите единственное целое число — минимальное время, необходимое для достижения поставленной цели.
3 2
2 3 4
8
4 2
50 100 50 100
296
10 3
2 2 2 2 2 2 2 2 2 2
8
В первом примере оптимальное решение выглядит так:
Название |
---|