1 条题解
-
0
E. 每秒伤害 详细题解
题目核心理解
你有 个技能点,可以分配给单次伤害 和每秒攻击次数 ,满足:
- 均为正整数
击杀第 只怪物需要 次攻击,总攻击次数为:
$$f(x)=\sum_{i=1}^n \left\lceil \frac{h_i}{x} \right\rceil $$总时间为 ,即 。
目标:选择 使得总时间最小,输出对应的 。
核心思路
1. 关键性质
- 忽略上取整时, 是时间的下界,其最小值在 处。
- 最优解几乎一定出现在 附近很小的范围内。
- 远离中心点的 可以直接用下界剪枝跳过,无需计算。
2. 快速计算规则
对给定 ,计算 的方式:
- 将 降序排序。
- 前一部分较大的值暴力累加。
- 后一部分值重复较多,用二分分段统计,避免 遍历。
3. 枚举规则
- 从中心点 开始,由近到远枚举 。
- 对每个 ,先检查下界 ,若已大于当前最优则直接跳过。
- 否则计算真实时间,更新最优解。
算法流程
- 将 数组降序排序,计算总血量 。
- 设中心点 ,以它为初始最优解。
- 按距离 从小到大枚举所有合法 。
- 对每个 :
- 若下界 当前最优时间,跳过。
- 否则分段计算 ,得到真实时间 。
- 若更优,则更新最优 。
- 输出最优的 和 。
公式与复杂度分析
总攻击次数:
$$f(x)=\sum_{i=1}^n\left\lceil\frac{h_i}{x}\right\rceil $$总时间:
时间下界:
复杂度
- 排序:
- 枚举 + 计算:
- 总时间复杂度:
可轻松处理 、 的数据范围,在 秒时限内稳定通过。
- 1
信息
- ID
- 6586
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者