TLV 是一种简单实用的数据组织方案,包括三个部分:类型(T)、长度(L)和值(V)。
某业务某块约定 TLV 规则如下:
- 码流数据以字符串表达时,每字节用 2 位十六进制数字表达,其中
a-f
均小写,单个空格分隔 - 码流数据中,类型(T)占 2 字节,长度(L)占 4 字节,后续为值(V);类型与长度均为大端序
解答要求
时间显示:1000ms。内存限制:256MB
输入
输入为单行字符串,包含若干单个空格分隔的 2 位十六进制数,如:
00 01 00 00 00 01 6f
- 用例涉及数据码流字节长度范围为 [6,300],即包含最多 300 个 2 位十六进制数
- 用例保证格式正确,无非法输入
输出
解码后输出成单行字符串,格式为:
{T:<type>,L:<len>,V:<letter-cnt>}
其中:
<type>
为解析后的类型(T),十进制<len>
为解析后的长度(L),十进制<letter-cnt>
为合法
内容(V)中,包含所有ascii码为英文字母的数量,忽略大小写。
POWER_2_TO_8 = 256 def read_input(): string_tlv = list(map(lambda x: int(x, 16), input().strip().split(" "))) return string_tlv def tlv_output(tag, length, value): print("{T:%s,L:%s,V:%s}" % (tag, length, value)) def func(): string_tlv = read_input() tag = string_tlv[0] * POWER_2_TO_8 + string_tlv[1] length = (string_tlv[5] + POWER_2_TO_8 * ( string_tlv[4] + POWER_2_TO_8 * (string_tlv[3] + POWER_2_TO_8 * string_tlv[2]))) value = 0 index = 6 if len(string_tlv) - 5 <= length: value = -1 else: while index <= length + 5: if 65 <= string_tlv[index] <= 90 or 97 <= string_tlv[index] <= 122: value += 1 index += 1 tlv_output(tag, length, value) if __name__ == "__main__": func()
我们不能把不相容的货物装在同一集装箱里运输,如果氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸或其他危险。现给一张不相容物品清单,及每一集装箱货物运输清单。请你判断每个集装箱是否安全。
解答要求
时间限制:1000ms,内存限制:256MB
输入
- 首航输入两个正整数:分别代表不相容货物对的数量
N
(0,10000]和集装箱货品清单的数量M
(0,100] - 接下来
N
行每一行是一对不相容货物编号;编号都是 5 位数,编号对之间是空格。 - 然后输入
M
行,每一行包含一个集装箱货物总数[1,1000]与货物编号明细。
输出
对每箱货物清单,判断是否可以安全运输;按照顺序输入,安全则输出 Yes
,否则输出No
,每行以换行结束。
def read_input(): incompatible_num, container_num = map(int, input().strip().split(" ")) incompatibility = list() containers = list() incompatible_num_temp = incompatible_num while incompatible_num_temp: __info = input().strip().split(" ") incompatibility.append(__info) incompatible_num_temp -= 1 container_num_temp = container_num while container_num_temp: __info = input().strip().split(" ") containers.append(__info[1:]) container_num_temp -= 1 return incompatible_num, container_num, incompatibility, containers def func(): incompatible_num, container_num, incompatibility, containers = read_input() incompatibility_dict = {} for incompatibility_item in incompatibility: if not incompatibility_dict.get(incompatibility_item[0]): incompatibility_dict[incompatibility_item[0]] = [] incompatibility_dict[incompatibility_item[0]].append(incompatibility_item[1]) for container in containers: result = True for item in container: if not result: break if incompatibility_dict.get(item): for incompatibility_item in incompatibility_dict[item]: if incompatibility_item in container: result = False break if result: print("Yes") else: print("No") if __name__ == "__main__": func()
现有一树形网络,每个节点是一个设备,每个设备具有一个设备编号和一个管理容量值。
你的任务是:找出从根节点到叶节点的管理容量之和等于给定数值的所有路径。
如下图,横线上的 2 位数是设备编号,横线下的为管理容量值。
解答要求
时间限制:1000ms,内存限制:256MB
输入
-
第一行分别为节点个数 N(<100)、非叶子节点的个数 M(<N)、给定的管理容量 S(<2^30)
-
第二行按节点编号顺序给出 N 个节点的管理容量值;
-
最后 M 行,每行按以下格式给出
ID K ID[1] ID[2] ... ID[K]
其中
ID
是一个非叶节点的 2 位数编号,K
是其子节点的个数,后面 K 个数字是一系列子节点的编号
输入中出现的数值均为正整数
为简单起见,我们固定根节点的编号为
00
。
输出
- 找出所有管理容量值为 S 的路径,并按非递增序输出。用例保证至少有一条路径满足要求
- 每条路径占一行,输出从根节点到叶节点每个节点的管理容量。数字间以一个空格分隔。
行首尾不得有多余空格
def read_input(): node_num, non_leaf_node_num, target_capacity = map(int, input().split(" ")) node_capacity = map(int, input().split(" ")) node_relations = list() non_leaf_node_num_temp = non_leaf_node_num while non_leaf_node_num_temp: all_info = list(map(int, input().strip().split(" "))) __id = all_info[0] __childs = all_info[2:] __info = {'id': __id, 'childs': __childs} node_relations.append(__info) non_leaf_node_num_temp -= 1 return node_num, non_leaf_node_num, target_capacity, node_capacity, node_relations def find(node_id, node_capacity_list, node_relations_dict, target_capacity, path, path_result): path.append(node_capacity_list[node_id]) new_path_result = path_result if not node_relations_dict.get(node_id) and sum(path) is target_capacity: new_path_result.append(path.copy()) elif not node_relations_dict.get(node_id): pass else: for child_id in node_relations_dict.get(node_id): new_path_result = find(child_id, node_capacity_list, node_relations_dict, target_capacity, path, path_result) path.pop() return new_path_result def func(): node_num, non_leaf_node_num, target_capacity, node_capacity, node_relations = read_input() node_capacity_list = [] for capacity in node_capacity: node_capacity_list.append(capacity) node_relations_dict = {} for relation in node_relations: node_relations_dict[relation.get("id")] = relation.get("childs") path_result = find(0, node_capacity_list, node_relations_dict, target_capacity, [], []) path_result.sort(reverse=True) for item in path_result: line_string = "" for sub_item in item: line_string += str(sub_item) + " " print(line_string[:-1]) if __name__ == "__main__": func()