CCF 201612 3 許可權查詢

2021-08-27 05:02:24 字數 1643 閱讀 6570

p段是給出的基本許可權,其實沒有必要去處理,因為題目中告知:r段的資訊一定是準確的。

②處理r段時,使用map> rolemap

即每個role對應一些許可權,而許可權的形式是:《許可權名,等級》,其中等級為-1表示它是不分等級許可權。

③處理u段時,儲存每個user對應的角色名稱,採用map> usermap

即每個user對應了一些角色名。

④處理q段時,對於每個查詢的user,找到他們對應的role,在每個role中查詢它們的許可權。

①在處理分等級許可權時,如string str = "tmp:2",許可權名為string(str.begin(), str.end()-2),許可權為*(str.end()-1) - '0',因為等級是0~9的乙個數字

乙個role中某個許可權出現多次,以最高等級為準

③合理的使用迭代器,注意非法訪問的問題:如查詢的user不存在,許可權不存在等問題

④輸出時,只需考慮true和數字的情況,其它情況(包括非法訪問)一律輸出false

⑤題目說明了u段的role都來自r段,但是好像並不是這樣??

⑥map真好用~

#include #include #include #include #define endl "\n"		//"\n"的效率高一些 

using namespace std;

int n,num;

string tmp,name; //tmp一律儲存許可權,如tmp:3 name儲存user/role的名稱

void deal_priv() //無需處理p段,直接全部讀取完就好了 }}

map> usermap; //儲存每個user對應的roles

void deal_user() }}

void deal_a_query() //處理每個查詢

}} if(imax != -10) //輸出最大等級

{ cout<::iterator p="user_map_it-">second.begin(); p != user_map_it->second.end(); ++p)

{ role_map_it = rolemap.find(*p);

if(role_map_it == rolemap.end()) continue;

for(map::iterator q = role_map_it->second.begin(); q != role_map_it->second.end(); ++q)

if(q->first == pri && q->second >= rank) //查詢等級小於等於user等級

許可權查詢 CCF201612 3

傳送門 題解 雷少的stl真的玩的太厲害了,雷少是我見過現實版身邊最勵志的人,很刻苦,很玩命,像雷少學習。開始正解 這個題使用三個map即可,第乙個map儲存許可權,第二個map儲存角色,value儲存許可權陣列,第三個map儲存使用者,然後直接進行模擬即可。附上 includeusing name...

ccf 201612 3 許可權查詢

ccf 201612 3 許可權查詢 解題思路 建立乙個二維矩陣儲存許可權和角色 還差30分emmm 1 include2 include3 include4 using namespace std 5const int maxn 100 5 6 const int maxq 10000 5 7 m...

CCF201612 3 許可權查詢問題

思路 第一步 用3個結構體陣列表示使用者 角色 許可權的資訊,定義如下 struct privilege 定義許可權 struct role 定義角色 struct user 定義使用者 第二步 然後就是輸入許可權 角色 使用者的資訊。這裡要理清關係 乙個使用者可以有多個角色,乙個角色有多個許可權 ...