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 翻译