1090 危险品装箱python3无超时

一、最初代码

#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
@File    :   1090.py
@Time    :   2020/07/05 20:23:04
@Author  :   Schiller Xu 
@Version :   1.0
@License :   (C)Copyright 2020-2021, SchillerXu
@Desc    :   None
'''

n,m=map(int,input().split())
key=[]
value=[]
for i in range(n):
    s=input().split()
    key.append(s[0])
    value.append(s[1])

for i in range(m):
    s=input().split()
    k=int(s[0])
    s=set(s[1:])
    flag='Yes'
    for j in s:
        for l in range(n):
            if j==key[l] and value[l] in s:
                flag='No'
                break
        if flag=='No':
            break
    print(flag)

用列表key和value保存不相容的物品,在比对清单的时候需要大量循环,代码超时

二、最终代码

#!/usr/bin/env python
# -*-coding:utf-8 -*-
'''
@File    :   1090.py
@Time    :   2020/07/05 20:23:04
@Author  :   Schiller Xu 
@Version :   1.0
@License :   (C)Copyright 2020-2021, SchillerXu
@Desc    :   None
'''

n,m=map(int,input().split())
d=dict()
for _ in range(n):
    a,b=input().split()
    d[a]=d.get(a,[])+[b]

for _ in range(m):
    s=input().split()[1:]
    s=set(s)
    flag='Yes'
    for j in s:
        try:
            value=d[j]
        except:
            continue
        for i in d[j]:
            if i in s:
                flag='No'
                break
        if flag=='N0':
            break
    print(flag)
  • 使用字典保存不相容的物品,如果用d[a]=b进行赋值会因key重复导致丢失数据,得用d[a]=d.get(a,[])+[b],在原先数据的基础上“迭加”;
  • 如果清单有问题,那么不相容的物品一定是成对出现的,所以不用构造键和值相互索引的字典,由此产生的时间和空间代价主要取决于不相容物品的对数和清单排列方式。

三、参考资料

python解决 1090 危险品装箱

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值