话单发送
某核心网设备向计费网关发送话单(一个话单指一条通话记录的信息),发送规则如下:
- 每个话单具有长度和优先级两个属性,优先级值越小表示优先级越高,高优先级的发送完,才能发送次优先级的。
- 设备有一个承载规格,表示发送话单总容量的阈值,发送话单的总长度不能超过承载规格。
现给定设备的承载规格和待发送话单(长度和优先级)列表,请计算最多可以发送多少个话单。
解答要求
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 256MB, 其他语言:512MB
输入
第一行是正整数 cap ,表示设备的承载规格,取值范围:[1,10000]
第二行是正整数 num ,表示待发送话单的数量,取值范围:[0,100]
第三行 num 个整数,依次表示每个待发送话单的长度,每个值的范围:[0, 1000]
第四行 num 个整数,依次表示每个待发送话单的优先级,每个值的范围:[0,30]
第三行和第四行的数据一一对应,表示同一个话单的长度和优先级。
输出
输出一个整数,表示最多能发送话单的个数。
样例1
复制输入:
110
5
50 20 30 10 50
2 2 1 3 1
复制输出:
3
解释:
- 首先尝试发送优先级为 1 的话单,长度分别是30和50,长度之和在承载规格范围内,优先级 1 的两个话单全部完成发送,剩余容量为30。
- 接着尝试发送优先级为 2 的话单,长度20的被发送,剩余容量为10,长度50的无法发送。
- 因优先级 2 的话单未发送完(仍剩余一条),优先级3的所有话单都无法发送。
所以,最多能发送的话单数为 3 。
提示
答题要求:您编写的代码需要符合CleanCode的要求(包括通用编码规范、安全编码规范和圈复杂度)
""" Copyright (c) Huawei Technologies Co., Ltd. 2020-2020. All rights reserved. Description: 上机编程认证 Note: 缺省代码仅供参考,可自行决定使用、修改或删除 """ from typing import List import collections class Solution: def get_max_send_num(self, cap: int, bill: List[int], pri: List[int]) -> int: # 在此添加你的代码 if not bill: return 0 dic = collections.defaultdict(list) number = 0 for i in range(len(pri)): dic[pri[i]].append(bill[i]) keys = sorted(list(dic.keys())) for p in keys: values = sorted(dic.get(p)) if values[0] > cap: return number for j in values: if j > cap: return number else: cap -= j number += 1 return number if __name__ == "__main__": cap = int(input()) num = int(input()) if num == 0: function = Solution() results = function.get_max_send_num(cap, [], []) print(results) else: bill = list(map(int, input().strip().split())) pri = list(map(int, input().strip().split())) function = Solution() results = function.get_max_send_num(cap, bill, pri) print(results)

浙公网安备 33010602011771号