6s 1G
在洛谷上提交时,请使用不低于 C++17 的语言版本,并且无需添加 game.h 头文件。
《猫和老鼠》是一部家喻户晓的动画片。小 G 根据这部动画片设计了一个游戏。在这个游戏中,玩家需要帮助 Tom 使用机器猫抓住 Jerry。
Jerry 的活动范围是数轴上的区间 。初始时刻(即第 秒时),Jerry 可能位于该区间内的任意位置。之后,它可以在该区间内自由移动,但任意时刻的速度不会超过每秒 单位长度。
Tom 有 个可供部署的机器猫,其中部署第 ()个机器猫的成本为 。若部署了第 ()个机器猫,则其会在第 秒从位置 出现,然后以每秒 单位长度的速度向位置 匀速移动,并在抵达后消失。
Jerry 初始拥有 点生命值。每当它与一个机器猫完全重合时(即存在某个时刻,两者位置完全相同),其生命值将减少 ,该机器猫也会随之失效。当 Jerry 的生命值小于或等于 时,Tom 即成功抓住 Jerry。
小 G 设定 Tom 必须在初始时刻就部署好机器猫。因此,玩家需要在游戏开始前选定若干个机器猫进行部署。玩家获胜当且仅当部署好机器猫后,对于 Jerry 所有可能的移动路径,Tom 均能成功抓住 Jerry。
小 G 为这个游戏设计了很多关卡,并邀请你进行测试。为了控制游戏难度,小 G 计划为部署机器猫的成本总和设置一个合理的上限。你需要帮助小 G 求出,玩家获胜所需部署的机器猫的成本总和的最小值。
【实现细节】
选手不需要,也不应该实现 main 函数。
选手需要确保提交的程序包含头文件 game.h,即在程序开头加入以下代码:
选手需要在提交的程序源文件 game.cpp 中实现以下两个函数:
- 分别表示测试点编号与测试数据组数。 表示该测试点为样例。
- 对于每个测试点,该函数会在程序开始运行时被交互库调用恰好一次。
long long game(int n, int m, int k, std::vector<int> a, std::vector<int> b, std::vector<int> t, std::vector<int> w);
- 分别表示机器猫的个数、Jerry 的活动范围与 Jerry 的初始生命值。
- 对于 , 分别表示第 个机器猫的出现位置、最终位置、出现时间与部署成本。
- 该函数需要返回成本总和的最小值。特别地,如果部署所有机器猫也无法获胜,则返回 。
- 对于每个测试点,该函数会被交互库调用恰好 次。
注意:在任何情况下,交互库运行所需时间均不会超过 秒,所用内存为固定大小,且均不超过 MiB。
【测试程序方式】
试题目录下的 grader.cpp 是交互库参考实现,最终测试时所用的交互库实现与该参考实现有所不同,因此选手的解法不应该依赖交互库实现。
选手可以在本题目录下使用如下命令编译得到可执行程序:
g++ grader.cpp game.cpp -o game -O2 -std=c++14 -static