#P11114. [ROI 2024 Day 1] 小推车
[ROI 2024 Day 1] 小推车
题目背景
翻译自 ROI 2024 D1T3。
题目描述
航空公司提供了一种新型的商务舱,飞机上的座位沿着过道排列。假设座位总数为 ,座位的坐标从 到 。
每个乘客都有一个饮料偏好,饮料的种类共有 种,编号从 到 。每个乘客只能选择一种饮料。在飞机上,饮料需要从一辆小推车上分给乘客。
饮料装在一个瓶子里,每个瓶子的饮料可以服务 个乘客。也就是说,一个瓶子的容量为 。小推车最多可以装载 个瓶子。保证 。
小推车从座位前方的起点(坐标为 )开始移动,并最终到达终点(坐标为 )。在小推车服务乘客的过程中,它可能需要去往储藏室中装载新的饮料。储藏室可能位于飞机前部的起点处,也可能位于后部的终点处,也有可能两侧都有。
如果小推车在座位 的位置,它需要移动到起点处的储藏室的距离是 ,而到达终点处的储藏室的距离是 。小推车在行进过程中可能需要补充饮料,如果小推车到达储藏室,它可以卸下空的瓶子,并装载新的饮料。不可以卸下还装有饮料的瓶子。在补充饮料后,小推车应该回到第一个未提供饮料的乘客的位置,再继续向后为乘客提供服务。
你需要计算小推车从 移动到 的最小总移动距离,以便为所有乘客提供所需的饮料。
输入格式
第一行包含四个整数 ,, 和 ,分别表示座位数量、小推车所装瓶子的容量、饮料种类数量和每个瓶子所装饮料的容量。
第二行包含一个整数 ,表示储藏室的位置, 的取值范围是 到 。 表示储藏室只在终点位置; 表示储藏室只在起点位置; 表示储藏室在起点和终点都有。
第三行包含 个整数 ,表示第 个座位的乘客需要的饮料的类型。
输出格式
输出一个整数,表示小推车在服务所有乘客的过程中所需的最小移动距离。
5 2 2 1
1
1 2 1 2 1
14
8 3 2 2
2
1 1 1 1 1 2 2 2
17
8 3 3 2
3
1 2 2 3 2 3 2 1
15
8 6 6 2
2
1 2 3 4 3 5 6 1
9
7 3 3 1
3
1 2 3 2 2 1 3
16
提示
在第一个样例中,小推车可以装载 个瓶子,每瓶含 份饮料。储藏室位于客舱的尽头。
- 首先,小推车需要装上饮料 和 ,这些饮料将分发给座位 和 的乘客,小推车需要行驶 的距离从起点 到点 ,即 。
- 接着,小推车需要前往客舱尽头的储藏室(距离为 ),装上饮料 和 ,然后返回到座位 (小推车需要移动 的距离)。。
- 然后,小推车要为座位 和 的乘客提供饮料 和 (小推车在座位 和 之间移动 的距离)。。
- 最后,小推车需要再次前往储藏室(从座位 到储藏室的距离为 ),装上饮料 ,从储藏室返回到座位 (距离为 ),服务完该乘客后再移动 的距离到客舱尽头。。
总距离为 。
在第二个样例中,小推车可以装载 个瓶子,每瓶含 份饮料。储藏室位于客舱的前端。小推车需要装满 瓶饮料 ,服务座位 到 的乘客。之后, 瓶饮料 将被用完,需要立刻前往储藏室装满 瓶饮料 ,然后服务座位 到 的乘客(如果在服务完乘客 后再回储藏室补充饮料,则要移动更长的距离)。
在第三个样例中,小推车可以装载 个瓶子,每瓶含 份饮料,储藏室分别位于客舱的两端。为了服务乘客,需要 瓶饮料 ,以及饮料 和 各 瓶,因此需要去储藏室更换空瓶。最好的方案是在服务完座位 的乘客后,再去客舱前端的储藏室换取饮料 。
在第四个样例中,小推车需要装载每种饮料各 瓶,并且由于每瓶含 份饮料,这样可以在不额外补充的情况下服务所有乘客。
在第五个样例中,需要进行两次补充,小推车在服务完乘客 后需要第一次返回客舱开头的储藏室,第二次则是在服务完乘客 后去到客舱尽头的储藏室。
原题目有十二个子任务,由于洛谷限制这里不能全部上传。
对于 的数据,$3\le n\le 10^6,1\le p\le 10^6,1\le a_i\le k\le m\le 10^6,1\le c\le3$。