A、B两队成员对战,假设两队成员的战斗值可量化,且战斗值较大的成员即可赢对方。 另外,B队还有P个战斗能量包;获得能量包的成员,则其战斗值直接累加能量包的战斗值。 现在分别输入A、B队成员的战斗值数列、能量包数量P、每个能量包的战斗值E;你作为B队队长,请计算出B队最多可赢的成员数量。补充说明: (1)假设P个能量包的战斗值都是一样的(E) (2)输入的所有数值均为非负整数。 (3) A、B队成员都只能出战一次。 (4)每位成员最多只能用一个能量包 (不可多个能量包叠加使用)。 例1: 输
时间: 2023-06-06 17:05:16 浏览: 67
入: A队(2, 3, 8),B队(1, 4, 7),P=1,E=5 输出: 3
对于B队的每个成员,我们可以假定他们都用上了能量包,计算他们的实际战斗值,然后按照战斗值从大到小排序。然后从大到小依次尝试匹配剩下的A队成员,看能匹配多少个。匹配过程中,我们还需要记录下B队已经用了几个能量包,不能超过P个。时间复杂度为O(nlogn)。
具体实现可以参考下面的Python代码:
def max_win_num(A, B, P, E):
# 先按照实际战斗值从大到小排序
B_with_energy = sorted([b + E for b in B], reverse=True)
A.sort(reverse=True)
n = len(A)
m = len(B)
count = 0
j = 0
used_packs = 0
for i in range(n):
while j < m and B_with_energy[j] >= A[i]:
if used_packs < P:
used_packs += 1
j += 1
else:
break
if j < m and B_with_energy[j] < A[i]:
count += 1
j += 1
else:
break
return count
A = [2, 3, 8]
B = [1, 4, 7]
P = 1
E = 5
print(max_win_num(A, B, P, E)) # 输出3
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)