建立乙個字典,key = 使用者名稱, value = 許可權字典
# ['crm:2','git:2','git:3','game'] -->
# 經過合併處理後,將許可權列表轉化成字典
deftransautlist
(aut_list)
: aut_dict =
dict()
for item in aut_list:
# 'crm:2'
type
,*level = item.split(
':')
level =
int(level[0]
)if level else-1
iftype
in aut_dict:
aut_dict[
type]=
max(aut_dict[
type
], level)
else
: aut_dict[
type
]= level
return aut_dict
# 函式丟棄 p 段的輸入(沒用)
defp()
: n =
int(
input()
)for _ in
range
(n):
input()
# 對應題中的r段, 返回乙個字典 ,key=rolename , value = 許可權類別和等級對應的字典
defr()
: 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 = 許可權字典的 乙個字典
defu
(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
# 不帶等級查詢
201612 3 許可權查詢 模擬
傳送門 ccf第三題,同樣是一道非常複雜度模擬題,要非常細心不要漏掉哪一點.可惜我只得了90分,沒得滿分,找不出那10分是錯在 了.貼下90分 include include include include using namespace std void show map orig int mai...
CCF 201612 3 許可權查詢
p段是給出的基本許可權,其實沒有必要去處理,因為題目中告知 r段的資訊一定是準確的。處理r段時,使用map rolemap 即每個role對應一些許可權,而許可權的形式是 許可權名,等級 其中等級為 1表示它是不分等級許可權。處理u段時,儲存每個user對應的角色名稱,採用map usermap 即...
許可權查詢 CCF201612 3
傳送門 題解 雷少的stl真的玩的太厲害了,雷少是我見過現實版身邊最勵志的人,很刻苦,很玩命,像雷少學習。開始正解 這個題使用三個map即可,第乙個map儲存許可權,第二個map儲存角色,value儲存許可權陣列,第三個map儲存使用者,然後直接進行模擬即可。附上 includeusing name...