



思路:
创建一个字典,key = 用户名, value = 权限字典
# ['crm:2','git:2','git:3','game'] -->{'crm': 2, 'git': 3, 'game': [] ]}
# 经过合并处理后,将权限列表转化成字典
def transAutList(aut_list):
aut_dict = dict()
for item in aut_list: # 'crm:2'
type, *level = item.split(':')
level = int(level[0]) if level else -1
if type in aut_dict:
aut_dict[type] = max(aut_dict[type], level)
else:
aut_dict[type] = level
return aut_dict
# 函数丢弃 P 段的输入(没用)
def P():
n = int(input())
for _ in range(n): input()
# 对应题中的R段, 返回一个字典 ,key=roleName , value = 权限类别和等级对应的字典
def R():
ret = dict()
n = int(input())
for _ in range(n):
role, _, *pri_list = input().split()
pri_dict = transAutList(pri_list)
ret[role] = pri_dict
return ret
# 返回key = PersonName, value = 权限字典的 一个字典
def U(rdict):
n = int(input())
ret = dict()
for _ in range(n): # alice 2 it qa
name, _, *roles = input().split()
mgPri = dict()
# 开始合并角色的权限
for role in roles:
# 遍历角色对应的权限,并合并到pri中
for k, val in rdict[role].items():
# pri已经存在此命令,取最高权限
if k in mgPri:
mgPri[k] = max(mgPri[k], val)
else:
mgPri[k] = val
ret[name] = mgPri
return ret
if __name__ == '__main__':
P()
d = R()
r = U(d)
n = int(input())
for _ in range(n):
one_line = input().split()
name = one_line[0]
type, *lev = one_line[1].split(':')
lev = int(lev[0]) if lev else -1
# 不带等级查询
if lev == -1:
f = 'true' if name in r and type in r[name] else 'false'
if f == 'true' and r[name][type]!=-1:
f = r[name][type]
else:
if name not in r or type not in r[name]:
f = 'false'
else:
f = 'true' if r[name][type] >= lev and r[name][type] != -1 else 'false'
print(f)

51万+

被折叠的 条评论
为什么被折叠?



