QOJ.ac

QOJ

時間限制: 2.0 s 記憶體限制: 512 MB 總分: 100

#8918. 航班上的行李箱

统计

“鞑靼斯坦旗舰舰队”航空公司在其飞机上提供一种新型商务舱。飞机客舱由 $n$ 个座位组成,沿过道排成一排。我们沿客舱建立一条坐标轴,使得座位之间的距离为 $1$,且座位坐标从 $1$ 到 $n$。

在飞行过程中,乘务员需要穿过客舱为所有乘客分发饮料。饮料共有 $k$ 种,编号为 $1$ 到 $k$。每位乘客获得一份某种饮料,乘客在预订机票时会预订其偏好的饮料种类,因此所有乘客的偏好都是预先知道的。

饮料装在瓶子里,每瓶可容纳 $p$ 份同种饮料。饮料推车最多可装载 $m$ 瓶任意种类的饮料,保证 $m \geqslant k$。

乘客按座位号递增的顺序接受服务。最初,推车位于客舱起点的 $0$ 点,在开始服务前,可以将其装满任意种类的饮料。服务结束后,推车必须到达 $n+1$ 点。在 $0$ 点和 $n+1$ 点处可能设有储藏室:要么在客舱的一端设有一个储藏室,要么在两端各设有一个储藏室,储藏室内存有充足的各种饮料。在这些储藏室中,可以从推车上卸下空瓶并装上满瓶。

在服务过程中,饮料会被消耗,因此有时需要前往其中一个储藏室补充推车上的饮料储备。如果当前推车位于 $i$ 号座位对面,则前往 $0$ 点处的储藏室需要行驶距离 $i$,而前往 $n+1$ 点处的储藏室需要行驶距离 $n+1-i$。在储藏室中,可以从推车上卸下空瓶,并在空位上装载任意种类的饮料瓶。卸下的瓶子必须是空的,不能卸下尚有剩余饮料的瓶子,也不能倾倒饮料。不允许在不同瓶子之间转移剩余饮料。可以在推车上装载多于一瓶的同种饮料。此后,推车必须从储藏室行驶到第一位未受服务乘客的座位,以继续服务。

请确定推车从 $0$ 点移动到 $n+1$ 点并为所有乘客提供服务所需行驶的最小距离。

输入格式

输入的第一行包含四个整数 $n, m, k, p$ ($3 \leqslant n \leqslant 10^6, 1 \leqslant p \leqslant 10^6, 1 \leqslant k \leqslant m \leqslant 10^6$),分别表示客舱座位数、推车容量、饮料种类数和每瓶饮料的容量。

下一行包含一个整数 $c$ ($1 \leqslant c \leqslant 3$),描述客舱内储藏室的分布情况。若 $c=1$,则储藏室仅位于 $n+1$ 点。若 $c=2$,则储藏室仅位于 $0$ 点。若 $c=3$,则两端均设有储藏室。

下一行包含 $n$ 个整数 $a_i$ ($1 \leqslant a_i \leqslant k$),表示乘客预订的饮料种类。

输出格式

程序应输出一个整数,即推车必须行驶的最小距离。

样例

样例 1

输入

5 2 2 1
1
1 2 1 2 1

输出

14

样例 2

输入

8 3 2 2
2
1 1 1 1 1 2 2 2

输出

17

样例 3

输入

8 3 3 2
3
1 2 2 3 2 3 2 1

输出

15

样例 4

输入

8 6 6 2
2
1 2 3 4 3 5 6 1

输出

9

样例 5

输入

7 3 3 1
3
1 2 3 2 2 1 3

输出

16

说明

在第一个样例中,推车容量为 $m=2$ 瓶,每瓶 $p=1$ 份。储藏室位于客舱末端。最初,推车需要装载 $1$ 类和 $2$ 类饮料的瓶子,这些饮料将分发给 $1$ 号和 $2$ 号座位的乘客,推车从 $0$ 点行驶到 $2$ 点,距离为 $2$。之后,推车需要行驶到客舱末端的储藏室(距离为 $4$),装载 $1$ 类和 $2$ 类饮料的瓶子,并返回 $3$ 号座位(推车行驶距离为 $3$)。$3$ 号和 $4$ 号座位的乘客获得 $1$ 类和 $2$ 类饮料(推车从 $3$ 号座位行驶到 $4$ 号座位,距离为 $1$)。之后,推车需要再次前往储藏室(从 $4$ 号座位到储藏室距离为 $2$),从储藏室返回 $5$ 号座位(距离为 $1$),并再行驶 $1$ 到客舱末端。总距离为 $2 + 4 + 3 + 1 + 2 + 1 + 1 = 14$。

在第二个样例中,推车容量为 $m=3$ 瓶,每瓶 $p=2$ 份。储藏室位于客舱起点。需要装载三瓶 $1$ 类饮料,为 $1$ 到 $4$ 号座位的乘客提供服务。之后两瓶 $1$ 类饮料耗尽,需要立即前往储藏室装载两瓶 $2$ 类饮料,然后为 $5$ 到 $8$ 号座位的乘客提供服务。

在第三个样例中,推车容量为 $m=3$ 瓶,每瓶 $p=2$ 份,储藏室位于客舱两端。为乘客提供服务需要两瓶 $2$ 类饮料和各一瓶 $1$ 类及 $3$ 类饮料,因此需要前往储藏室一次,将空的 $2$ 类饮料瓶更换为满瓶。最好在为 $3$ 号座位乘客提供服务后进行,推车应前往客舱起点的储藏室。

在第四个样例中,推车需要装载每种饮料各一瓶,由于每瓶可容纳两份饮料,这使得无需额外补充推车即可为所有乘客提供服务。

在第五个样例中,需要两次补充推车,一次是在为 $3$ 号座位乘客提供服务后,推车必须返回客舱起点的储藏室;第二次是在为 $6$ 号座位乘客提供服务后,返回客舱末端的储藏室。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.