CF472B Design Tutorial: Learn from Life

题目描述

创造任务的一种方法是从生活中学习。你可以选择生活中的某个经历,将其形式化,然后你就能得到一个新的任务。 让我们来思考一个现实生活中的场景:许多人在电梯前排队,每个人都想去某一层。我们可以将其形式化如下。有 $n$ 个人站在第一层,第 $i$ 个人想去第 $f_{i}$ 层。不幸的是,只有一部电梯,并且其容量为 $k$(即同时最多可容纳 $k$ 个人)。最开始电梯在第一层。电梯从第 $a$ 层移动到第 $b$ 层需要 $|a-b|$ 秒时间(上下电梯的时间不计入内)。 请你计算,要把所有人送到他们各自想去的楼层后,再把电梯返回到第一层,最少需要多少秒?

输入格式

输入包括两行。第一行包含两个整数 $n$ 和 $k$,分别表示人数和电梯容量。第二行包含 $n$ 个整数 $f_1, f_2, \ldots, f_n$,表示每个人想前往的楼层编号。

输出格式

输出一个整数,表示完成任务所需的最少时间。

说明/提示

在第一个样例中,一种最优方案如下: 1. 电梯带上第 1 个人和第 2 个人。 2. 电梯到达第 2 层。 3. 两个人都下电梯。 4. 电梯返回第 1 层。 5. 然后电梯带上第 3 个人。 6. 电梯到达第 2 层。 7. 捎上第 2 个人。 8. 然后电梯到达第 3 层。 9. 第 2 个人下电梯。 10. 然后电梯到达第 4 层,第 3 个人下电梯。 11. 电梯返回第 1 层。 由 ChatGPT 5 翻译