问题描述
试题编号: | 201612-3 |
试题名称: | 权限查询 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个模块的操作权限。 输入格式 输入第一行是一个正整数 p,表示不同的权限类别的数量。紧接着的 p 行被称为 P 段,每行一个字符串,描述各个权限。对于分等级权限,格式为 <category>:<level>,其中 <category> 是权限类名,<level> 是该类权限的最高等级。对于不分等级权限,字符串只包含权限类名。 输出格式 输出共 q 行,每行为 false、true,或者一个数字。false 表示相应的用户不具有相应的权限,true 表示相应的用户具有相应的权限。对于分等级权限的不带等级查询,如果具有权限,则结果是一个数字,表示该用户具有该权限的(最高)等级。如果用户不存在,或者查询的权限没有定义,则应该返回 false。 样例输入 3 样例输出 false 样例说明 样例输入描述的场景中,各个用户实际的权限如下: 评测用例规模与约定 评测用例规模: |
代码
#权限查询
pris = {} #privileges
roles = {}
users = {}
#权限
p = int(input())
for i in range(p):
s = input().split(":")
pris[s[0]] = s[1] if len(s)==2 else ""#因为保证合法性所以其实不用写这段
#角色
r = int(input())
for i in range(r):
s = input().split()
n = int(s[1])#角色权限个数
mypri = []
for j in range(2,2+n):
mypri.append(s[j].split(":"))
roles[s[0]] = mypri#以列表储存
#用户
u = int(input())
for i in range(u):
s = input().split()
n = int(s[1])#用户角色个数
myrole = []
for j in range(2,2+n):
myrole.append(s[j])
mypri = {}
for role in myrole:#遍历用户
for pri in roles[role]:#遍历每个用户权限
if(len(pri)==1):#无等级权限
mypri[pri[0]]=""
elif (pri[0] not in mypri):#等级权限首次存储
mypri[pri[0]]=int(pri[1])
else:#比较存入权限最大等级
mypri[pri[0]] = max(mypri[pri[0]],int(pri[1]))
users[s[0]] = mypri#用字典存储
#查询
q = int(input())
for i in range(q):
name,this_pri = input().split()#用户名,权限
this_pri = this_pri.split(":")#区分是否有等级
if(name in users):#用户存在
if(this_pri[0] in users[name]):#权限名存在
if(len(this_pri)==1):
if(users[name][this_pri[0]]==""):#无等级权限
print("true")
else:
print(users[name][this_pri[0]])#查询等级
elif(len(this_pri)==2):#带等级
if(users[name][this_pri[0]]==""):#无效查询
print("false")
elif(int(this_pri[1]) <= users[name][this_pri[0]]):#等级满足
print("true")
else:#等级不满足
print("false")
else:
print("false")
else:
print("false")