问题
Lena正在为一场重要的编码竞赛做准备,随后将进行一系列连续的初步竞赛。最初,她的运气平衡为0。她相信“可以节省运气”,并希望检验自己的理论。每个比赛用两个整数L[i]
和T[i]
来描述:
L[i]
是与比赛相关的运气。如果莉娜(Lena)赢得比赛,她的运气余额将减少L[i]
;如果她输了,她的运气余额将增加L[i]
。T[i]
表示比赛的重要性等级。如果比赛很重要,则等于1
;如果不重要,则等于0
。如果莉娜在重要的比赛中输掉的次数不超过k
,那么在参加所有预赛之后她能获得的最大运气是多少?此值可能为负。
请找到完整的说明here
我的努力
这是我为该问题编写的代码。我要添加所有不重要的问题,并将所有重要问题的运气价值存储在数组中。已排序数组。然后从允许她赢得的问题中获取所有最低限度的运气平衡,并将其减去并在其余的比赛中输掉运气。
代码
#!/bin/python3
import math
import os
import random
import re
import sys
# Complete the luckBalance function below.
nk = input().split()
n = int(nk[0])
k = int(nk[1])
contests = []
maximumLuckBalance = 0
for i in range(n):
luckcontestRating = input().split()
luck = int(luckcontestRating[0])
contestRating = int(luckcontestRating[1])
#print("Contest[",i+1, "]:" + "luck: ", luck, "Contest Imp: ", contestRating)
if contestRating == 0:
maximumLuckBalance += luck
else:
contests.append(luck)
contests.sort()
#print(contests)
winAllowed = len(contests) - k
#print(winAllowed)
winningLucksum = sum(contests[:winAllowed])
#print(winningLucksum)
loosingLucksum = sum(contests[winAllowed:])
maximumLuckBalance = maximumLuckBalance - winningLucksum + loosingLucksum
print(maximumLuckBalance)
问题
但是,由于答案错误,此代码在测试用例#8 中失败。我的解决方案中是否有任何错误?
答案 0 :(得分:1)
您的代码存在的问题是,您假设k
始终小于或等于额定比赛数-len(contests)
。
例如,让我们考虑以下输入:
4 3
1 0
2 0
3 1
4 1
正确的输出必须是:
10
但是您的代码会产生:
4
因为winningLucksum = sum(contests[:-1]) = 3
和losingLucksum = sum(contests[-1:]) = 4
以及maximumLuckBalance = 3 - 3 + 4 = 4
。
因此,请确保winAllowed
永远不会因替换而变为负数
winAllowed = len(contests) - k
用一行:
winAllowed = max(len(contests) - k, 0)
然后,您的解决方案将通过所有测试。