当前位置: 首页 > 知识库问答 >
问题:

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

督阿苏
2023-03-14

问题

Lena正在准备一场重要的编码竞赛,在此之前有许多连续的预赛。最初,她的运气平衡是0。她相信“节省运气”,并想检查她的理论。每场比赛都由两个整数描述,L[i]T[i]

  • L[i]是与比赛相关的运气量。如果莉娜赢得比赛,她的运气余额将减少L[i];如果她失去了它,她的运气余额将增加L[i]。
  • T[i] 表示比赛的重要性评级。如果比赛很重要,则等于 1,如果比赛不重要,则等于 0

如果Lena在不超过< code>k场重要比赛中失利,她在所有预赛中获胜后的最大运气是多少?该值可能为负值。

请在此处找到完整描述

我的努力

这是我为这个问题写的代码。我添加了所有不重要的问题,并将所有重要问题的运气值存储在一个数组中。对数组进行排序。然后从她被允许获胜的问题中提取所有最小运气余额,减去这个余额,并从她输掉的比赛的其余部分中添加运气。

法典

#!/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

共有1个答案

岳硕
2023-03-14

你的代码的问题在于你假设k总是小于或等于评级竞赛的数量 - len(contests)。

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

4 3

1 0 

2 0

3 1

4 1

正确的输出必须是:

10

但是您的代码会产生:

4

因为,winningLucksum=sum(竞赛[:-1])=3lo看作Lucksum=和(竞赛[-1:])=4,所以最大LuckBalance=3-3 4=4

因此,确保win的永远不会通过替换得到否定

winAllowed = len(contests) - k

用一行:

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

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

 类似资料:
  • 本文向大家介绍Eclipse git推送上传错误问题解决方案,包括了Eclipse git推送上传错误问题解决方案的使用技巧和注意事项,需要的朋友参考一下 Eclipse 中的 Git Eclipse 附带了一个名为 Egit 的插件,它提供了一个非常完善的 Git 操作接口。 这个插件可以通过切换到 Git 视图来使用。( Window > Open Perspective > Other…,

  • 本文向大家介绍如何解决数据不平衡问题?相关面试题,主要包含被问及如何解决数据不平衡问题?时的应答技巧和注意事项,需要的朋友参考一下 这主要是由于数据分布不平衡造成的。解决方法如下: 采样,对小样本进行加噪声采样,对大样本进行下采样 进行特殊的加权,如在Adaboost中或者SVM 采用对不平衡数据集不敏感的算法 改变评价标准:用AUC|ROC来进行评价 考虑数据的先验分布 https://blog

  • 本文向大家介绍Linux下乱码问题的解决方案小结,包括了Linux下乱码问题的解决方案小结的使用技巧和注意事项,需要的朋友参考一下 linux系统中文件名内容为urf8编码, windows系统中文件名默认为gbk编码, 多数文档使用gbk编码,系统采用utf8编码 无中文输入法导致的乱码 1、ibus输入法 Ubuntu 系统安装后已经自带了ibus输入法,在英语环境下默认不启动。配置ibus自

  • 我有一个我无法解决的组合问题。 给定一组向量和一个目标向量,为每个向量返回一个标量,以便集中缩放向量的平均值最接近目标。 编辑:权重w_i在范围[0,1]内。这是一个约束优化问题: 最小化d(平均(w_i*x_i),目标),条件是总和(w_i)-1=0 如果我不得不命名这个问题,它将是无界子集平均。 我已经研究过无界背包和类似的问题,但由于数字的相互依赖性,动态编程实现似乎是不可能的。 我还补充了

  • 接口通用问题解决方案 通用错误码,错误信息及解决方案 400(非法的client_id) 400(非法的client_secret) 402(未传当前用户手机号) 402(手机号不合法) 403,10002(IP不在白名单中,本次请求ip:xxx.xxx.xxx.xxx) 403(无权访问该接口) 406(该用户不存在,请管理员添加后再使用) 408(未传timestamp或者timestamp格

  • 本章内容包含常见错误码及错误信息描述,并给出解决问题的步骤。如果在开发过程中遇到报错,请先在本章中搜索解决方案,谢谢! 通用错误码,错误信息及解决方案 400(非法的client_id) client_id是否正确填写 client_id对应的申请应用是否通过审核 400(非法的client_secret) client_secret是否和client_id对应,有可能client_id是A应用的