测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A33780. 编程实现给出一排黑色带数字的小球(数字为0到9),和一排白色带数字的小球(数字为0到9),现从两排小球中一共选取K个小球排成一排。要求:1)选出的黑色小球顺序要和原来顺序一致;2)选出的白色小球顺序要和原来顺序一致;在满足以上要求的情况下,使得K个小球排成新的一排组成的数字最大例如:黑色小球的原顺序为:白色小球的原顺序为:K为3;从两排小球中共选取3个小球,排成可以组成的最大数字为654。输入描…

填空题 困难

题目描述

编程实现

给出一排黑色带数字的小球(数字为0到9),和一排白色带数字的小球(数字为0到9),现从两排小球中一共选取K个小球排成一排。

要求:

1)选出的黑色小球顺序要和原来顺序一致;

2)选出的白色小球顺序要和原来顺序一致;

在满足以上要求的情况下,使得K个小球排成新的一排组成的数字最大

例如:

黑色小球的原顺序为:

白色小球的原顺序为:

K为3;

从两排小球中共选取3个小球,排成

可以组成的最大数字为654。

输入描述

第一行输入一组正整数,代表黑色小球,每个正整数范围为0到9,正整数之间以一个英文逗号隔开

第二行输入一组正整数,代表白色小球,每个正整数范围为0到9,正整数之间以一个英文逗号隔开

第三行输入一个正整数K(K小于等于所有小球的总数),表示从所有小球中共选取K个小球

输出描述

输出一个整数,表示按照要求选取K个小球后,组成的最大数字

样例输入

2,5,3

6,2,4,1

3

样例输出

654

参考答案

nums_black=input().split(',') nums_black=[int(num) for num in nums_black] nums_white=input().split(',') nums_white=[int(num) for num in nums_white] K=int(input()) def pick_max(nums,k): stack=[] drop=len(nums)-k for num in nums: while drop and stack and stack[-1]<num: stack.pop() drop-=1 stack.append(num) return stack[: k] def merge(A,B): res=' ' while A or B: bigger=A if A>B else B res+=str(bigger.pop(0)) return int (res) ans=max(merge(pick_max(nums_black,i),pick_max(nums_white,K-i))for i in range(K+1) if i <= len(nums_black) and K-i <= len(nums_white)) print(ans)
上一题 下一题