【PAT_Python解】1090 危险品装箱

原题链接:PTA | 程序设计类实验辅助教学平台

Tips:以下Python代码仅个人理解,非最优算法,仅供参考!多学习其他大佬的AC代码!

import sys

def read_input():
    input_data = sys.stdin.read().splitlines()  # 使用splitlines以行的形式读取输入
    n, m = map(int, input_data[0].split())  # 读取不相容对数N和货品清单单数M
    _bans = []
    
    # 解析不相容物品对
    for i in range(1, n + 1):
        item1, item2 = input_data[i].strip().split()
        _bans.append((item1, item2))
    
    # 解析货品清单
    cargo_lists = []
    for i in range(n + 1, n + 1 + m):
        goods = input_data[i].strip().split()
        k = int(goods[0])  # 第一个元素为数量
        cargo_lists.append(goods)  # 直接将货品列表添加,不需再构建一次

    return _bans, cargo_lists

def can_transport_safely(_bans, cargo_lists):  
    # 构建一个字典,用于快速查找每个物品的不相容物品  
    bans = {}  
    for item1, item2 in _bans:  
        if item1 not in bans:  
            bans[item1] = set()  
        bans[item1].add(item2)  
        if item2 not in bans:  
            bans[item2] = set()  
        bans[item2].add(item1)  
  
    results = []  
    for cargo in cargo_lists:  
        current_goods_set = set(cargo[1:])  # 使用一个集合来存储当前集装箱中的物品  
        is_safe = True  
          
        # 检查物品与不相容物品对的关系
        for good in cargo[1:]:  
            if good in bans and any(item in current_goods_set for item in bans[good]):  
                results.append("No")  
                is_safe = False  
                break  
          
        if is_safe:
            results.append("Yes")
  
    return results  
  
# 调用函数并输出结果  
_bans, cargo_lists = read_input()  # 读取并解析输入
results = can_transport_safely(_bans, cargo_lists)  
for result in results:  
    print(result)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新时代先锋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值