打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CCF CSP 201612-3权限查询(c 100)

CCF CSP 201612-3权限查询


按题意模拟,一层层嵌套,有注释

#include<iostream>#include<map>#include<string>#include<algorithm>using namespace std;map<string,int>category,cy;map<string,map<string, int> >role;map<string,map<string, int> >user;int main(){int n;cin>>n;//存储权限 for(int i = 0; i < n; i  ){string s;cin>>s;int f = -1;//分有权限和无权限两种 if((f = s.find(':'))!=-1){int num = 0;for(int j = f 1; j < s.size(); j  ){num = num * 10   s[j]-'0';}category[s.substr(0,f)] = num;}else category[s] = -1;}cin>>n;//存储权限 for(int i = 0; i < n; i  ){string str,s;int m;cin>>str>>m;cy.clear();for(int k = 0; k < m; k  ){cin>>s;int f = -1;//带权限的存储最大权限,无权限的存储为-1 if((f = s.find(':'))!=-1){int num = 0;for(int j = f 1; j < s.size(); j  ){num = num * 10   s[j]-'0';}if(cy.count(s.substr(0,f))){cy[s.substr(0,f)] = max(cy[s.substr(0,f)],num);}else{cy[s.substr(0,f)] = num;}}else cy[s] = -1;}role[str] = cy;}//存储角色cin>>n;for(int i = 0; i < n; i  ){string str,s;int m;cin>>str>>m;cy.clear();for(int k = 0; k < m; k  ){cin>>s;int f = -1;//遍历角色中的权限,替换到用户中 map<string,int> mp = role[s];for(map<string,int>::iterator it = mp.begin(); it != mp.end(); it  ){if(cy.count(it->first)){cy[it->first] = max(cy[it->first],it->second);}else{cy[it->first] = it->second;}}}user[str] = cy;}//for(map<string,map<string,int> > ::iterator it = user.begin(); it != user.end(); it  ){//cout<<it->first<<":";//for(map<string,int>::iterator it1 = it->second.begin(); it1 != it->second.end(); it1  ){//cout<<it1->first<<"  "<<it1->second<<" ";//}//cout<<endl;//}cin>>n;for(int i = 0; i < n; i  ){string name,privilege;cin>>name>>privilege;//是否有该用户 if(user.count(name)){int f = -1;//是否是带权限查询 if((f = privilege.find(':'))!=-1){int num = 0;for(int j = f 1; j < privilege.size(); j  ){num = num * 10   privilege[j]-'0';}//权限是否存在 if(user[name].count(privilege.substr(0,f))){if(user[name][privilege.substr(0,f)] >= num){cout<<"true";}else{cout<<"false";}}else{cout<<"false";}}else{if(user[name].count(privilege)){if(user[name][privilege] == -1)cout<<"true";else{cout<<user[name][privilege];}}else{cout<<"false";}}}else{cout<<"false";}cout<<endl;}return 0;}
来源:https://www.icode9.com/content-1-767851.html
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
上千万或上亿数据(有反复),统计当中出现次数最多的N个数据. C++实现
华为机试HJ23:删除字符串中出现次数最少的字符
C++标准库:std_map作为一个关联数组
PTA1071 - Speech Patterns - map计算不同单词个数
(C++)STL中map按照vaule来排序
map使用pair作为主键
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服