241.小杰打怪物
题目描述
有n个自爆怪,每只怪物血量为ai,并且怪物死亡时(血量小于等于0)会发生自爆,对其他怪物造成等同于其初始血量的伤害。小杰每次攻击可以对任意一只怪物造成1点伤害。他想知道,最少攻击多少次可以击杀全部怪物?
输入描述
第一行输入一个正整数n,代表怪物的数量
第二行输入n个正整数ai,代表每只怪物的血量。
1 <= n <= 105;
1 <= ai <= 109。
输出描述
一个正整数,代表小杰的最小攻击次数。
输入示例
3
1 2 3
输出示例
2
提示信息
对第1只怪物、第2只怪物各攻击1次即可。攻击第1只怪物时,第1只怪物死亡时白爆,对第 2、3 只怪物备造成1点伤害。此时第2只怪物血量只剩1点,再攻击一次即可。然后第2只怪物自爆,对第3只怪物造成2点伤害,第3 只怪物也死亡。
时间限制:c/c++/go:1s;其他语言:3s。
n = int(input())
a = list(map(int, input().split()))
a.sort()
total_attacks = 0
prefix_sum = 0
for ai in a:
required = ai - prefix_sum
if required > 0:
total_attacks += required
prefix_sum += ai
print(total_attacks)