给定 n 个物品,每个物品原价 p_i,打折价 q_i。若打折力度达到 k=\frac{a}{b} 那就可以购买这个物品,问可以购买的最多物品的总价。
数据范围:n(1 \le n \le 10^4),a,b(1 \le a \le b \le 10^4),p_i,q_i(1 \le q_i \le p_i \le 10^4)。
思路
签到题没啥好说的,折扣比较的话,直接化成相同分母,比较分子就行了,全程用整数避免浮点误差。
D. Dune
现在有一条数轴,你站在 x 的位置,现在有 n 条虫子,每条虫子覆盖的区间为 [l_i, r_i],并且每条虫子有速度 v_i / 秒。你可以选择一个时刻 t 召唤虫子,你召唤到的虫子长度等于那个时间点覆盖到点 x 的长度最短的虫子,问你能召唤到的最长的虫子长度。
数据范围:n(1 \le n \le 10^5),x(0 \le x \le 10^9),l_i,r_i(-10^9 \le l_i \le r_i \le 10^9),
v_i(1 \le v_i \le 10^9)
思路
这题没做但是思考了一下,感觉是考虑到虫的位置具有单调性,也就是它经过 t 个单位时间后位置一定是单调递增的,应该是要弄出每条虫覆盖 x 的时间点,然后再解决其他子问题。
E. Epsilon Estuary
玩家拥有一个全屏攻击的武器,伤害固定为 y。拥有 n 个怪物,第 i 个怪物有 x_i 血。每次受到攻击,假设剩余 x 血量,则怪物分裂成 \lceil \frac{x}{2} \rceil 和 \lfloor \frac{x}{2} \rfloor 两个新的怪物,问多少回合干掉这些怪物,一共 T 组询问。
数据范围: T(1 \le T \le 10^5),n(1 \le n \le 10^5),y(1 \le y \le 10^{18}),x_i(1 \le x_i \le 10^{18})
因为如果要成为胜利者,至少要有一次ac,所以枚举 A 的所有提交,并判断假设 A 在第 i 个提交中ac了, B 有多少种情况罚时 \ge A 的。比如枚举到第 i 个时间点并假设 A 在这个时间点获得了第一次ac,对于 [1, i- 1] 这些位置是确定的,只能填 reject,而 i 这个位置只能填 accept。然后使用二分找到 B 中第一个罚时 \ge A 的点 j。对于 B 也是同样的道理,[1, j - 1] 是 reject ,j 是 accept。去除确定的部分,那么有变的部分就是后面的了,A 的情况就有 k=1*2^{n - i} ,B 的情况就有 l=1*2^{m-j} 种。
那么答案就是 \sum{k}{l} 了。
K. Kingdom Rush: Vengeance
给定 n 个防御塔和 m 个敌人。每个防御塔的防御范围是 [l_i, r_i],伤害是 w_i,若有多个防御塔重叠在同一个点,那造成的伤害是他们的总和。敌人的出生点在 0.5 + x_i ,有 h_i 的血量,每个时刻结束后会固定向前移动 1 个距离。