#P6040. 课后期末考试滑溜滑溜补习班(Cram School)
课后期末考试滑溜滑溜补习班(Cram School)
课后期末考试滑溜滑溜补习班(Cram School)
题目描述

潮田 渚(Shiota Nagisa)因为理科不大好,自然会被仔细观察学生的杀老师发现,于是渚同学只得加入杀老师举办的课后期末考试滑溜滑溜补习班。至于为什么叫这个名字,额,你不能问我啊。
在补习班上,因为多个学生会同时有需求,所以杀老师会制造分身用音速移动来回回答问题。
补习班上有 个同学,他们每一个人都有一个问题。杀老师为了有序回答学生的问题,把所有学生排成了一列。第 个学生的问题有一个困难值 ,杀老师回答第 个学生的问题需要花费 的精力。杀老师到了哪里,它就要解决那个学生的问题。杀老师最开始会解决序列中第一个同学的问题,他最后会去解决最后一个同学的问题。
杀老师每次解决完一个同学的问题到下一个同学的座位上就要花费 点精力值。特殊的,如果杀老师想让自己轻松一点,可以不移动到下一个,可以直接到下两个,下三个,就不用解决跳过的同学的问题了。对应的,它会被学生调侃。受到打击的杀老师自然会花费格外的精力,花费的精力为 (当前位置为 ,跳到的位置为 )。
当然的,杀老师也是有速度的啊,并且它想解决学生的一些问题,所以说杀老师最多只会跳过 个学生,去解决下 个学生的问题。
输入格式
第一行五个整数 ,表示有 个学生,只按顺序去到下一个学生的座位需要花费 点精力,每多跳过一个学生就要多花费 点精力值,每一次最多只能跳过 个学生,是否是特殊数据。
-
,第二行 个整数 , 表示第 个学生的问题的困难值为 。
-
,第二行一个整数 ,作为种子,然后调用 函数依次生成 个整数,作为 数组, 表示第 个学生的问题的困难值为 。
inline int rnd () {
static const int MOD = 1e9;
return Seed = ( 1LL * Seed * 0x66CCFF % MOD + 20120712 ) % MOD;
}
输出格式
一行一个整数,表示杀老师解决完最后一个同学的问题最少需要花费多少精力。
样例输入 #1
5 3 4 1 0
1 2 3 4 5
样例输出 #1
27
样例输入 #2
10 30630 56910 2 0
7484 99194 86969 17540 29184 68691 91892 81564 93999 74280
样例输出 #2
717318
样例输入 #3
10000000 899999999 923456655 213111 1
1314520
样例输出 #3
9231813656566921
数据范围
样例解释 #1
杀老师每次不能跳过学生,因此他必须依次移动并解决所有问题,故答案为解决问题所需的精力 与移动所需的精力 ,所以花费精力之和为 。
数据范围
本题采用捆绑测试。
- Subtask 1(20 points),学生们学习认真听话,留下来的同学也会更少:,。
- Subtask 2(30 points),杀老师的速度快极了,并且学生们没时间吐槽它:,。
- Subtask 3(50 points),,其余无特殊限制。
对于 的数据,,,。
提示
对于 的数据, 函数只用于减小输入量,标准算法不依赖该数据生成方式。
知识点与难度
本题涉及的知识点从属于 CSP-S,难度(CF Rating):1700。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~3 | 样例(含 tp=0 与 n=10^7,tp=1) |
| 1 | 20 | 4~8 | 小规模 tp=0,n≤1000 / 特殊: x=1不跳过 / 特殊: x=n-1一步跳至终点 |
| 2 | 15 | 9~11 | Hack: k=0,d=0零移动惩罚 / Hack: d=10^9极大跳过惩罚必逐个走 / Hack: a_i=10^9极大题难必满跳 |
| 3 | 30 | 12~20 | 中规模 tp=0,n≤2×10^5 / 大规模 tp=1,n=10^7 单调队列线性压力 |
| 4 | 25 | 21~25 | 随机 tp=0/1 混合回归 |
出处:原题链接