蓝桥杯最大的卡牌价值(python)

蓝桥杯最大的卡牌价值(python)_第1张图片

这一题的贪心思路就是去找到反面大于正面的的差值,然后找出k个最大的(这里要注意一个细节就是操作的次数k是可能大于卡牌数量n的)

这题伪代码就是定义一个变量ans去接收a列表的累加值,循环n次去计算反面减去正面的值,然后可以直接把值赋值给反面列表b也可以新建一个列表,我这里就是直接把计算完的值在赋值给b列表。然后在给b列表从大到小排序,之后在循环k次当反面大于正面的时候把差值加到ans里面(但是因为可能有k大于n的情况所以不能直接循环k次,当k大于n的时候直接循环n次)

import os
import sys

# 请在此输入您的代码
read = sys.stdin.readline
#读入n和k
n,k = map(int,read().split())
#读入正面和反面的数字
a = list(map(int,read().split()))
b = list(map(int,read().split()))
#计算正面数字的累加和
ans = sum(a) 
#去计算反面减去正面的差值,在赋值给数组b
for i in range(n):
  b[i] -= a[i] 
#倒序排列这样就可以保证交换的值是最大的
b.sort(reverse = True)
#在交换的时候一定要考虑到k可能大于n的情况不然就可能数组越界了
#在把交换的差值加到ans里面这样最大的价值就算出来了
for j in range(min(n,k)):
  if b[j] > 0:
    ans += b[j]
print(ans)

这一题需要注意的就是计算完差值的数组要倒叙排列,然后还要考虑k大于n的情况,如果不考虑这个情况就会有可能发生数组越界,当时我第一次写的时候提交就只通过了百分之30就是因为我循环了k次所以大部分都报段错误只过了两组数据,这也算一个小坑吧之后一定会认真读题l。

你可能感兴趣的:(蓝桥杯,python,职场和发展)