#HK4261. 「KTSC 2024 R2」跳跃游戏
「KTSC 2024 R2」跳跃游戏
注意事项
在 LibreOJ 上,由于语言限制,目前只支持以下语言的提交:
- C++(标准为 C++ 17 及以上)
请在提交源代码前添加 #include "jumpgame.h"。
题目描述
题目译自 2024년도 국제정보올림피아드 대표학생 선발고사 - 2차 선발고사 T2 「점프 게임」
KOI 公司推出的跳跃游戏是一款通过多次跳跃穿越 个踏板的游戏。具体来说,游戏中有 个踏板按顺序排列在一条直线上,每个踏板从左到右依次编号为 。游戏开始时,主角站在最左边的 号踏板上,初始得分为 。
对于每个 ,主角可以选择走一步或跳跃。如果选择走一步,主角将移动到 号踏板,得分不变。如果选择跳跃,主角将移动到 号踏板,得分增加 。其中 是预先设定的常数。游戏在主角到达 号踏板的右侧时成功结束。也就是说,主角到达编号为 的踏板时,游戏结束——这些编号大于等于 的踏板实际上不存在,但表示主角已经越过了 号踏板。游戏的目标是通过合理控制主角的行动,使得分最大化并成功结束游戏。
喜欢网络直播的尚赫偶尔会玩 KOI 公司的跳跃游戏。虽然他自己玩得很开心,但观众们却反应平平。跳跃游戏不受欢迎的原因在于游戏非常困难且枯燥。首先,这款游戏的踏板数量可以多达 个。其次,即使是 KOI 公司的优秀开发者也无法设计出如此多的踏板,因此他们采用了一种相对简单的方法来生成每个踏板。开发者们最初将所有 设置为 ,然后进行 次操作:对于每个 ,他们选择一个区间 ,将 的值增加 。所有操作完成后的数组 就是游戏中每个踏板跳跃时获得的得分。
你是一名制作计算机科学视频的创作者,决定制作一个关于如何以最高得分完成 KOI 公司的跳跃游戏的视频。你认为这个视频会在尚赫的观众中大受欢迎,但你担心游戏规模太大,难以找到高效的算法。克服所有困难,在给定的 5 小时内成为这款游戏的高手吧!
实现细节
你需要实现以下函数:
long long play_game(long long N, int Q, long long K, vector<long long> L, vector<long long> R);
N:游戏中存在的踏板数量。Q:开发者执行的操作次数。K:跳跃后到达的下一个踏板的编号。L, R:大小为 的整数数组。- 该函数返回一个整数,表示跳跃游戏结束时可以获得的最高得分。
- 该函数在每个测试点中只会被调用一次。
注意,提交的代码中不应包含任何输入输出操作。
样例 1
考虑 的情况。
评测程序将调用如下函数:
play_game(3, 5, 2, [0, 0, 1, 1, 1], [2, 2, 1, 1, 1]);
经过 次操作后,得到的数组为 。此时可以获得的最高得分是 。获得 分的方法之一如下:
- 从 号踏板走一步到 号踏板。
- 从 号踏板跳跃,获得 分。
- 到达编号大于等于 的踏板,游戏结束。
因此,函数应返回 5。
样例 2
评测程序将调用如下函数:
play_game(250, 8, 50, [0, 40, 49, 50, 100, 149, 199, 75], [200, 140, 49, 150, 190, 199, 199, 249]);
可以获得的最高得分是 。因此,函数应返回 17。
样例 3
评测程序将调用如下函数:
play_game(250, 8, 49, [0, 40, 49, 50, 100, 149, 199, 75], [200, 140, 49, 150, 190, 199, 199, 249]);
可以获得的最高得分是 。因此,函数应返回 19。
样例 4
评测程序将调用如下函数:
play_game(100, 6, 50, [0, 0, 0, 20, 40, 60], [99, 70, 10, 30, 50, 70]);
可以获得的最高得分是 。因此,函数应返回 6。
样例 5
评测程序将调用如下函数:(为了可读性,部分数字之间添加了空格)
play_game(1000000000000, 2, 1, [0, 0], [999999999999, 999999999999]);
可以获得的最高得分是 。因此,函数应返回 2000000000000。
数据范围与提示
对于所有输入数据,满足:
- 对于所有 ,
详细子任务附加限制及分值如下表所示。
| 子任务 | 分值 | 附加限制 |
|---|---|---|
| 无附加限制 |
示例评测程序
示例评测程序按以下格式读取输入:
- 第 行:
- 第 行:
示例评测程序按以下格式输出:
- 第 行:
play_game返回的值
注意,示例评测程序可能与实际评测程序不同。