一、最初代码
#!/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],在原先数据的基础上“迭加”;
- 如果清单有问题,那么不相容的物品一定是成对出现的,所以不用构造键和值相互索引的字典,由此产生的时间和空间代价主要取决于不相容物品的对数和清单排列方式。