Python 运气平衡问题解决方案产生错误的结果

Python 运气平衡问题解决方案产生错误的结果,python,arrays,python-3.x,algorithm,Python,Arrays,Python 3.x,Algorithm,问题 Lena正在为一场重要的编码比赛做准备,这场比赛之前会有一系列的预赛。起初,她的运气平衡为0。她相信“节省运气”,并想验证她的理论。每个竞赛由两个整数描述,L[i]和T[i]: L[i]是与比赛相关的运气量。如果莉娜赢得比赛,她的运气平衡将减少L[i];如果她输了,她的运气平衡将增加L[i] T[i]表示比赛的重要性等级。如果比赛很重要,它等于1,如果比赛不重要,它等于0 如果莉娜输掉的重要比赛不超过k,那么她在参加所有预赛后能获得的最大运气是多少?该值可能为负值 请找到完整的描述 我

问题

Lena正在为一场重要的编码比赛做准备,这场比赛之前会有一系列的预赛。起初,她的运气平衡为0。她相信“节省运气”,并想验证她的理论。每个竞赛由两个整数描述,
L[i]
T[i]

  • L[i]
    是与比赛相关的运气量。如果莉娜赢得比赛,她的运气平衡将减少
    L[i]
    ;如果她输了,她的运气平衡将增加
    L[i]
  • T[i]
    表示比赛的重要性等级。如果比赛很重要,它等于
    1
    ,如果比赛不重要,它等于
    0
如果莉娜输掉的重要比赛不超过
k
,那么她在参加所有预赛后能获得的最大运气是多少?该值可能为负值

请找到完整的描述

我的努力

97 58
105 0
103 0
106 1
106 1
103 0
103 1
105 1
106 1
105 0
104 0
103 0
102 0
104 0
105 0
104 0
102 1
104 0
106 1
104 1
101 1
105 0
103 0
104 0
106 0
102 1
103 0
102 0
103 1
106 0
104 1
101 1
101 1
106 0
103 1
103 0
104 1
101 0
105 1
105 0
104 1
105 0
106 0
104 0
105 0
101 1
106 1
105 0
103 0
104 1
101 1
106 1
104 0
106 1
105 0
103 1
101 0
103 0
101 0
105 1
104 1
104 1
105 1
105 1
103 0
101 0
104 1
106 1
105 1
105 0
106 1
104 1
105 1
103 1
102 1
106 0
101 0
105 1
104 1
103 1
106 1
101 0
106 1
103 0
106 1
102 1
103 0
101 1
102 1
101 1
104 0
106 0
102 0
104 0
105 0
105 0
102 1
103 1
10069
这是我为这个问题写的代码。我正在添加所有非重要问题,并将所有重要问题的运气值存储在一个数组中。已经对数组进行了排序。然后从允许她获胜的问题中减去所有的最低运气余额,然后从她输掉的比赛的其余部分中加上运气

代码

#!/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)
问题

但是,对于其中一个测试用例,该代码失败(请参见下面的输入)我的解决方案有什么问题?

输入

97 58
105 0
103 0
106 1
106 1
103 0
103 1
105 1
106 1
105 0
104 0
103 0
102 0
104 0
105 0
104 0
102 1
104 0
106 1
104 1
101 1
105 0
103 0
104 0
106 0
102 1
103 0
102 0
103 1
106 0
104 1
101 1
101 1
106 0
103 1
103 0
104 1
101 0
105 1
105 0
104 1
105 0
106 0
104 0
105 0
101 1
106 1
105 0
103 0
104 1
101 1
106 1
104 0
106 1
105 0
103 1
101 0
103 0
101 0
105 1
104 1
104 1
105 1
105 1
103 0
101 0
104 1
106 1
105 1
105 0
106 1
104 1
105 1
103 1
102 1
106 0
101 0
105 1
104 1
103 1
106 1
101 0
106 1
103 0
106 1
102 1
103 0
101 1
102 1
101 1
104 0
106 0
102 0
104 0
105 0
105 0
102 1
103 1
10069
预期产出

97 58
105 0
103 0
106 1
106 1
103 0
103 1
105 1
106 1
105 0
104 0
103 0
102 0
104 0
105 0
104 0
102 1
104 0
106 1
104 1
101 1
105 0
103 0
104 0
106 0
102 1
103 0
102 0
103 1
106 0
104 1
101 1
101 1
106 0
103 1
103 0
104 1
101 0
105 1
105 0
104 1
105 0
106 0
104 0
105 0
101 1
106 1
105 0
103 0
104 1
101 1
106 1
104 0
106 1
105 0
103 1
101 0
103 0
101 0
105 1
104 1
104 1
105 1
105 1
103 0
101 0
104 1
106 1
105 1
105 0
106 1
104 1
105 1
103 1
102 1
106 0
101 0
105 1
104 1
103 1
106 1
101 0
106 1
103 0
106 1
102 1
103 0
101 1
102 1
101 1
104 0
106 0
102 0
104 0
105 0
105 0
102 1
103 1
10069

代码的问题在于,您假设
k
始终小于或等于分级竞赛的数量-
len(竞赛)

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

4 3

1 0 

2 0

3 1

4 1
正确的输出必须是:

10
但您的代码将产生:

4
因为,
winningLucksum=sum(竞赛[:-1])=3
losingLucksum=sum(竞赛[-1:])=4
,所以
maximumLuckBalance=3-3+4=4

因此,请确保
winAllowed
不会通过替换

winAllowed = len(contests) - k
用一句话:

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

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

代码的问题在于您假设
k
始终小于或等于分级竞赛的数量-
len(竞赛)

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

4 3

1 0 

2 0

3 1

4 1
正确的输出必须是:

10
但您的代码将产生:

4
因为,
winningLucksum=sum(竞赛[:-1])=3
losingLucksum=sum(竞赛[-1:])=4
,所以
maximumLuckBalance=3-3+4=4

因此,请确保
winAllowed
不会通过替换

winAllowed = len(contests) - k
用一句话:

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

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

@Armali它太大了,但我在回答中用了一个小测试用例重现了这个问题。@Armali它太大了,但我在回答中用了一个小测试用例重现了这个问题。