CCF CSP 201612-3权限查询(c++100)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了CCF CSP 201612-3权限查询(c++100),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2206字,纯文字阅读大概需要4分钟。
内容图文
![CCF CSP 201612-3权限查询(c++100)](/upload/InfoBanner/zyjiaocheng/620/7d4016dd107c439e94ed3151b10ef0b9.jpg)
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;
}
内容总结
以上是互联网集市为您收集整理的CCF CSP 201612-3权限查询(c++100)全部内容,希望文章能够帮你解决CCF CSP 201612-3权限查询(c++100)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。