网站 建设app,百度风云榜各年度小说排行榜,推荐微商城网站建设,邵阳企业网站建设角色授权 fine#xff0c;又是一道acwing上TLE但是平台通过了的#xff0c;那就酱吧… 直接跟着题目来模拟的…先找到每个用户授予的所有角色#xff0c;包括用户本身和它所属的用户组。 然后遍历这个角色集合#xff0c;看是否有操作权限#xff0c;种类权限以及资源名称…角色授权 fine又是一道acwing上TLE但是平台通过了的那就酱吧… 直接跟着题目来模拟的…先找到每个用户授予的所有角色包括用户本身和它所属的用户组。 然后遍历这个角色集合看是否有操作权限种类权限以及资源名称权限。如果同时在一个角色下符合三种权限则此时可以进行操作退出角色集合的遍历。
跑了两次都是满分因为我用了auto所以提交的cpp14 以下是平台满分代码
#includebits/stdc.h
using namespace std;
unordered_mapstring, unordered_setstring role_opt; //角色可进行的操作
unordered_mapstring, unordered_setstring role_rtype; //角色所具有的资源种类
unordered_mapstring, unordered_setstring role_rname; //角色可以操作的资源名称unordered_mapstring, unordered_setstring u_role; //用户授予的角色名称
unordered_mapstring, unordered_setstring g_role; //用户组授予的角色名称int main()
{ios::sync_with_stdio(false);cin.tie(0);int n, m, q;cin n m q;for(int i 0;i n;i ){ //录入角色信息string name, str; int nv, no, nn;cin name nv;while(nv --){cin str;role_opt[name].insert(str);}cin no;while(no --){cin str;role_rtype[name].insert(str);}cin nn;//如果列表为空,则没有限制if(!nn) role_rname[name].insert(*);while(nn --){cin str;role_rname[name].insert(str);}}for(int i 0;i m;i ){string name, str1, str2; int ns;cin name ns;while(ns --){cin str1 str2;if(str1 u){u_role[str2].insert(name);}else{g_role[str2].insert(name);}}}while(q --){string uname, op, type, rname, str; int ng;unordered_setstring group; //用户组列表cin uname ng;while(ng --){cin str; group.insert(str);}cin op type rname;unordered_setstring role; //该用户所授予的全部角色名称for(auto x : u_role[uname]){role.insert(x);}for(auto gname : group){ //每一个用户组for(auto x : g_role[gname]){role.insert(x);}}bool flag false;for(auto x : role){ //遍历每一个角色bool flag_op false, flag_type false, flag_rname false;if(role_opt[x].count(op) || role_opt[x].count(*)) flag_op true;if(role_rtype[x].count(type) || role_rtype[x].count(*)) flag_type true;if(role_rname[x].count(rname) || role_rname[x].count(*)) flag_rname true;if(flag_op flag_rname flag_type){cout 1\n;flag true;break;}}if(!flag) cout 0\n;}return 0;
}