C. 小红打怪 (python解)-牛客
1.B. Alice's Adventures in Permuting (python解)-codeforces
2.C. 小红打怪 (python解)-牛客
3.B. Replacement (python解)-codeforces4.C - Sowing Stones(python解)-atcoder5.C. Alya and Permutation(python解)-codeforces6.AtCoder Beginner Contest 375 C题 (python解)7.C. Penchick and BBQ Buns (python解)-codeforces8.D - Strange Mirroring(python解)——Atcoder9.D. Sharky Surfing (python解)-codeforces10.牛客小白月赛105 (Python题解) A~EC. 小红打怪 (python解)-牛客
原题链接:
问题分析:
- 小红的全体打击技能对所有怪物造成1点伤害。
- 队友1的单体打击技能可以对任意单个怪物造成1点伤害。
- 队友2的范围攻击技能可以对相邻的两只怪物分别造成1点伤害(可对已死亡的怪物使用)。
思路:
- 设定一个函数
check(mx)
用来验证在mx
次攻击下,是否可以击杀所有怪物。 - 首先使用小红的技能,在每个回合中每个怪物的生命值减少
mx
。 - 使用队友的技能来补充对生命值仍然大于零的怪物的攻击。
- 我们可以使用二分法来寻找能够击杀所有怪物的最小回合数。即在
0
到10^14
之间进行查找。 - 通过
check(mx)
函数判断当前回合数是否足够。 - 直接计算每个技能的应用结果,避免不必要的数组复制,提高效率。
代码:
def main():
n = int(input())
a = list(map(int, input().split()))
def check(mx):
k1, k2 = mx, mx # 小红和队友2的技能可用次数
hp = a.copy() # 剩余血量
# 小红攻击
for i in range(n):
hp[i] = max(0, hp[i] - mx)
# 队友2的范围攻击
for i in range(n - 1):
if hp[i] > 0 and hp[i + 1] > 0:
t = min(hp[i], hp[i + 1], k2)
k2 -= t
hp[i] -= t
hp[i + 1] -= t
# 验证剩余血量是否可以用队友1的单体攻击击杀
return sum(hp) <= k1 + k2
left, right = 0, 10 ** 14
while left + 1 < right:
mid = (left + right) // 2
if check(mid):
right = mid
else:
left = mid
return right
print(main())
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异