华为OD真题 小杰打怪物

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值