解题思路
题目中每个敌人以恒定速度向基地移动,你的武器初始已充满能量,并且每分钟开始时(第 0、1、2... 分钟)最多可以消灭 1 个敌人;若某个敌人在某一分钟开始时已经到达基地(距离 ≤ 0),它会先攻击基地,游戏立刻结束。
把每个敌人“最晚还能撑到第几分钟开始前不到达基地”转成一个时间点:
- 敌人到达基地的时间是
dist[i] / speed[i](实数)
- 若它恰好在整数分钟
t 到达,则在第 t 分钟开始你还没来得及开枪就输了
- 因此我们用“到达的最早整数分钟”表示危险时刻:
P4550.第2题-塔防游戏
题目描述
你在玩一款塔防游戏,需要操控堡垒保护基地免收敌人袭击。
敌人与基地的距离由大小为 n 的整数数组 dist 表示,其中 dist[i] 是第 i 个敌人与基地的距离(单位为 km)。
敌人会以恒定的速度冲向基地,速度由大小为 n 的整数数组 speed 表示,其中 speed[i] 是第i个敌人的速度(单位为 km/min)。
你的堡垒有一种充能武器,该武器:
- 需要 1 分钟进行充能,一旦充满能量即可无视距离击杀一个敌人。
- 该武器在游戏开始时为充满能量的状态。
游戏规则如下
- 敌人从第 0 分钟开始移动,一旦有一个敌人抵达城市,游戏结束;
- 如果某个敌人刚好在某一分钟开始时抵达城市,他会在你的堡垒可以使用武器前攻击基地,游戏结束;
- 如果所有敌人在到达基地前被击杀,游戏结束。
输入
- 第一行为正整数
n,表示敌人的数量;
- 第二行为整数数组
dist,表示敌人的初始距离,有 n 个元素,中间以空格隔开,且 1 <= dist[i] <= 105;
- 第三行为整数数组
speed,表示敌人的速度,有 n 个元素,中间以空格隔开,且 1 <= speed[i] <= 20;
n = dist.length = speed.length;
- 1 <= n <= 105。
输出
一个正整数,表示游戏结束前可以消灭的最大数量。
样例 1
输入:
3
1 4 4
5 2 3
输出:
2
解释:
-
第 0 分钟开始,敌人的距离为 [1,4,4],第一个敌人距离基地最近,消灭了第一个敌人;
-
第 1 分钟开始,敌人的距离为[X,2,1],第三个敌人距离基地最近,消灭了第三个敌人;
-
第 2 分钟开始,敌人的距离为 [X,0,X],第二个敌人抵达基地,游戏结束。
击杀了 2 个敌人。
样例 2
输入:
3
1 2 3
1 1 1
输出:
3
解释:
-
第 0分钟开始,敌人的距离为 [1,2,3],第一个敌人距离基地最近,消灭了第一个敌人;
-
第 1 分钟开始,敌人的距离为 [X,1,2],第二个敌人距离基地最近,消灭了第二个敌人;
-
第2分钟开始,敌人的距离为 [X,X,1],只剩下第三个敌人,消灭了第三个敌人。
击杀了 3个敌人。