ccf 权限查询

来源:互联网 发布:知乎提问有什么话题 编辑:程序博客网 时间:2024/04/30 06:01
  * 用户 bob 具有 crm:1、git:2 和 game 权限  * 用户 charlie 具有 git:3 和 game 权限  * 用户 malice 未描述,因此不具有任何权限评测用例规模与约定  评测用例规模:  * 1 ≤ p, r, u ≤ 100  * 1 ≤ q ≤ 10 000  * 每个用户具有的角色数不超过 10,每种角色具有的权限种类不超过 10  约定:  * 输入保证合法性,包括:  1) 角色对应的权限列表(R 段)中的权限都是之前(P 段)出现过的,权限可以重复出现,如果带等级的权限重复出现,以等级最高的为准  2) 用户对应的角色列表(U 段)中的角色都是之前(R 段)出现过的,如果多个角色都具有某一分等级权限,以等级最高的为准  3) 查询(Q 段)中的用户名和权限类名不保证在之前(U 段和 P 段)出现过  * 前 20% 的评测用例只有一种角色  * 前 50% 的评测用例权限都是不分等级的,查询也都不带等级
思路:输入的权限在程序过程中是无用的,因为职位本身已经有了对应的权限,只需要把职位对应的权限存入相应的拥有该职位的人的名下,进行查询便可,注意输入和
一个人有两个职位,这两个职位对应相同权限不同等级的问题。
#include<bits/stdc++.h> using namespace std;struct Quanxian{string s;int n=-1;};struct Jiaose{string s;int n;struct Quanxian quan[100];};struct Mingzi{string s;int n;vector<Quanxian> q;};int main(){struct Quanxian quan[100];struct Jiaose jiao[100];struct Mingzi ming[100];int n1,n2,n3,n4;cin>>n1;string st;for(int i=0;i<n1;i++){cin>>st;int l=st.length();if(st[l-2]==':'){quan[i].n=st[l-1]-'0';quan[i].s=st.substr(0,l-2) ;}elsequan[i].s=st;}cin>>n2;for(int i=0;i<n2;i++){cin>>jiao[i].s;cin>>jiao[i].n;for(int k=0;k<jiao[i].n;k++){cin>>st;int l=st.length();if(st[l-2]==':'){jiao[i].quan[k].n=st[l-1]-'0';jiao[i].quan[k].s=st.substr(0,l-2) ;}elsejiao[i].quan[k].s=st;}}cin>>n3;for(int i=0;i<n3;i++){cin>>ming[i].s;cin>>ming[i].n;for(int k=0;k<ming[i].n;k++){cin>>st;for(int j=0;j<n2;j++){if((st==jiao[j].s)){for(int y=0;y<jiao[j].n;y++){ming[i].q.push_back(jiao[j].quan[y]);}break;}}}}cin>>n4;string st1;for(int i=0;i<n4;i++){cin>>st;int n=0;bool b=false;bool c=false;bool d=false;for(int k=0;k<n4;k++){if(st==ming[k].s){c=true;cin>>st1;int l=st1.length();if(st1[l-2]==':'){n=st1[l-1]-'0';st1=st1.substr(0,l-2);int tem=ming[k].q.size();for(int j=0;j<tem;j++){if(ming[k].q[j].s==st1){if(n<=ming[k].q[j].n){b=true;cout<<"true"<<endl;break;}}}if(!b){cout<<"false"<<endl;}}else{int tem=ming[k].q.size();for(int j=0;j<tem;j++){if(ming[k].q[j].s==st1){//d=true;if(ming[k].q[j].n==-1){b=true;cout<<"true"<<endl;break;}else{if(ming[k].q[j].n>n){n=ming[k].q[j].n;}}}}if(!b){if(n!=0)cout<<n<<endl;else cout<<"false"<<endl;}}}if(c)break;}if(!c)cout<<"false"<<endl;} return 0;}


                                             
0 0
原创粉丝点击