Python實現201612-3許可權查詢
阿新 • • 發佈:2020-08-16
題目:http://118.190.20.162/view.page?gpid=T50
寫了一個小時才做完,一開始拿了50分,後來拿了80,然後越除錯越低,才發現方向錯了
從80分除錯到100分
- 通過檢視題目意思,又看了看樣例說明
評測用例規模與約定 評測用例規模: * 1 ≤ p, r, u ≤ 100 * 1 ≤ q ≤ 10 000 * 每個使用者具有的角色數不超過 10,每種角色具有的許可權種類不超過 10 約定: * 輸入保證合法性,包括: 1) 角色對應的許可權列表(R 段)中的許可權都是之前(P 段)出現過的,許可權可以重複出現,如果帶等級的許可權重複出現,以等級最高的為準 2) 使用者對應的角色列表(U 段)中的角色都是之前(R 段)出現過的,如果多個角色都具有某一分等級許可權,以等級最高的為準 3) 查詢(Q 段)中的使用者名稱和許可權類名不保證在之前(U 段和 P 段)出現過 * 前 20% 的評測用例只有一種角色 * 前 50% 的評測用例許可權都是不分等級的,查詢也都不帶等級
重要
1) 角色對應的許可權列表(R 段)中的許可權都是之前(P 段)出現過的,許可權可以重複出現,如果帶等級的許可權重複出現,以等級最高的為準
2) 使用者對應的角色列表(U 段)中的角色都是之前(R 段)出現過的,如果多個角色都具有某一分等級許可權,以等級最高的為準
然後想起來自己每次獲取數值都是直接用等號,那麼如果以前賦值的大,現在賦值的小,就會有錯誤,解決方法
a = max(a,b) # 由於儲存結構採用的dict,所以可以使用get方法獲取某個key的值,改寫上面的程式碼 a = dic.get(key, -1) #如果dic有key則返回value,否則返回-1 a = max(a,b)
完整程式碼如下
p = int(input()) # category hight level category = {} # user role role = {} user = {} for i in range(p): line = input().split(':') if len(line) >= 2: category[line[0]] = category.get(line[0],0) + int(line[-1]) else: category[line[0]]=-1 r = int(input()) for i in range(r): line = input().split(' ') role[line[0]]={} for s in line[2:]: # role is dic temp_privilege = s.split(':') if len(temp_privilege)>=2: role[line[0]][temp_privilege[0]] = max(role[line[0]].get(temp_privilege[0], -1) , int(temp_privilege[-1])) else: if temp_privilege[0] not in role[line[0]].keys(): role[line[0]][temp_privilege[0]] = -1 u = int(input()) for i in range(u): line = input().split(' ') user[line[0]]={} for s in line[2:]: for q in role[s]: user[line[0]][q] = max(user[line[0]].get(q,-1) ,role[s].get(q, -1)) q = int(input()) for i in range(q): line = input().split(' ') is_print=False # search privilege and rank if ':' in line[-1] and line[0] in user.keys(): temp_role, temp_rank = line[-1].split(':') if user[line[0]].get(temp_role,-1) >= int(temp_rank): is_print = True # only search privilege elif line[0] in user.keys(): if line[-1] in user[line[0]].keys(): if user[line[0]].get(line[-1],-1) >= 0: print(user[line[0]][line[-1]]) continue is_print = True if is_print: print("true") else: print("false")