运气平衡问题-一个测试用例失败

时间:2019-11-08 12:23:05

标签: python python-3.x algorithm

问题

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 中失败。我的解决方案中是否有任何错误?

1 个答案:

答案 0 :(得分:1)

您的代码存在的问题是,您假设k始终小于或等于额定比赛数-len(contests)

例如,让我们考虑以下输入:

4 3

1 0 

2 0

3 1

4 1

正确的输出必须是:

10

但是您的代码会产生:

4

因为winningLucksum = sum(contests[:-1]) = 3losingLucksum = sum(contests[-1:]) = 4以及maximumLuckBalance = 3 - 3 + 4 = 4

因此,请确保winAllowed永远不会因替换而变为负数

winAllowed = len(contests) - k

用一行:

winAllowed = max(len(contests) - k, 0)

然后,您的解决方案将通过所有测试。