CCF201612 3 許可權查詢問題

2021-07-28 23:35:08 字數 2305 閱讀 1428

思路:

第一步:用3個結構體陣列表示使用者、角色、許可權的資訊,定義如下:

struct privilege  //定義許可權 

;struct role //定義角色

;struct user //定義使用者

;

第二步:然後就是輸入許可權、角色、使用者的資訊。這裡要理清關係:乙個使用者可以有多個角色,乙個角色有多個許可權

第三步:輸入查詢資訊,開始查詢:先查詢使用者資訊,若使用者存在,再遍歷使用者的角色,再遍歷每個角色的許可權資訊,當許可權名字相等時,判斷查詢的種類,根據查詢的種類改變標識變數的值。

第四步:根據標識變數輸出結果

ac**(有點多):

#include#includeusing namespace std;

struct privilege //定義許可權

;struct role //定義角色

;struct user //定義使用者

; struct user user[101];

struct role role[101];

struct privilege pri[101];

int findrole(string name)

} return -1;

}int finduser(string name)

} return -1;

}struct privilege getprivilege(string quanxian)

else //不帶等級

return p;

}int findprivilege(string name)

} return -1;

} int main()

cin>>r;

// 輸入角色

for(i = 0; i < r; i++)

} cin>>u;

//輸入使用者

for(i = 0; i < u; i++) }

cin>>q;

// 開始查詢

for(i = 0; i < q; i++)

else if(p.level == -1 && u.urole[j].privilege[k].level != -1) //分等級許可權的不分等級查詢

}else if(p.level != -1 && u.urole[j].privilege[k].level != -1)//分等級許可權的分等級查詢 } }

}}} if(priviflag == 1 && maxlevel != -1)

;struct role;

struct user;

struct category cate[101];

struct role role[101];

struct user user[101];

int p,r,u,q;

struct category getcategory(string s)else

return c;

} int finduser(string name)

} return -1;

}int findrole(string rolename)

} return -1;

} void findcategory(struct user oneuser,string quanxian)else

for(i = 0; i < oneuser.rolenum; i++)

// 分等級許可權帶等級查詢

if(onecategory.name == quanxianname && level != -1 && onecategory.level >= level)

// 分等級許可權不帶等級查詢

if(level == -1 && onecategory.level != -1 && quanxianname == onecategory.name)

} } }

if(flag == 1)

cin>>r;

//輸入角色

for(i = 0; i < r; i++)

} cin>>u;

//輸入使用者

for(i = 0; i < u; i++)

} }cin>>q;

//開始查詢

while(q--)else

} return 0;

}

CCF 201612 3 許可權查詢

p段是給出的基本許可權,其實沒有必要去處理,因為題目中告知 r段的資訊一定是準確的。處理r段時,使用map rolemap 即每個role對應一些許可權,而許可權的形式是 許可權名,等級 其中等級為 1表示它是不分等級許可權。處理u段時,儲存每個user對應的角色名稱,採用map usermap 即...

許可權查詢 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...