当前位置: 首页 > 面试经验 >

【华为OD机试2023】快递投放问题Python

优质
小牛编辑
129浏览
2023-03-28

【华为OD机试2023】快递投放问题Python

题目描述:

有N个快递站点用字符串标识,某些站点之间有道路连接。每个站点有一些包裹要运输,每个站点间的包裹不重复, 路上有检查站会导致部分货物无法通行,计算哪些货物无法正常投递

输入描述:

第一行输入M N,M个包裹N个道路信息. 0<=M,N<=100,检查站禁止通行的包裹如果有多个以空格分开

4 2 package1 A C package2 A C package3 B C package4 A C A B package1 A C package2 package4

输出描述:

输出不能送达的包裹 package2 package4,如果所有包裹都可以送达则输出none,输出结果按照升序排列

示例1

输入:

4 2

package1 A C

package2 A C

package3 B C

package4 A C

A B package1

A C package2

输出:

package2

解题思路:

题目说得不清楚,我按照每条路相互独立的思路来写的,即A-C是一条路,A-B是另一条路

先用两个字典分别存储包裹信息和道路信息,然后两层遍历,如果包裹的路径中包含某条道路名,且该道路的禁止运输名单中含有该包裹,则说明这个包裹无法正常投递,输出这个包裹的名称即可


m,n=map(int,input().split())
pack_info={}
road_info={}
for i in range(m):
info=input().split()
pack_info[info[0]]=''.join(info[1:])
pack_info=sorted(list(pack_info.items()),key=lambda x:x[0])
for j in range(n):
info=input().split()
key=''.join(info[0:2])
value=info[2:]
road_info[key]=value
for i in pack_info:
for j in road_info:
if j in i[1]:
if i[0] in road_info[j]:
print(i[0])

 类似资料: