CCF 权限查询

    xiaoxiao2021-03-25  118

    #include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<cmath> #include<queue> #include<map> #include<stack> #include<set> using namespace std; typedef long long ll; const int maxn=1010; int q,r,u,m; map<string,int> qxmingdan; map<string,vector<string> > usetojs; map<string,vector<string> > jstoqx; string qx; struct js{ string name; int counts; string qx[11]; }juese; struct user{ string name; int counts; string jsname[11]; }use; string usename,quanxian; int main(){ int i,j; cin>>q; for(i=0;i<q;++i){ cin>>qx; int len=qx.length(); if(len<2){ qxmingdan[qx]=10; }else{ if(qx[len-2]==':'){ qxmingdan[qx.substr(0,len-2)]=(qx[len-1]-'0'); }else{ qxmingdan[qx]=10; } } } cin>>r; for(i=0;i<r;++i){ cin>>juese.name>>juese.counts; for(j=0;j<juese.counts;++j){ cin>>juese.qx[j]; jstoqx[juese.name].push_back(juese.qx[j]); } } cin>>u; for(i=0;i<u;++i){ cin>>use.name>>use.counts; for(j=0;j<use.counts;++j){ cin>>use.jsname[j]; usetojs[use.name].push_back(use.jsname[j]); } } cin>>m; for(i=0;i<m;++i){ cin>>usename>>quanxian; if(usetojs.count(usename)==0){ puts("false"); continue; } int len=quanxian.length(); if(len<2){ if(qxmingdan.count(quanxian)==0){ puts("false"); continue; } }else{ if(quanxian[len-2]==':'){ if(qxmingdan.count(quanxian.substr(0,len-2))==0){ puts("false"); continue; } }else{ if(qxmingdan.count(quanxian)==0){ puts("false"); continue; } } } bool flag=false; int shu=0; int max=-1; vector<string> vec=usetojs[usename]; for(j=0;j<vec.size();++j){ vector<string> vec2=jstoqx[vec[j]]; for(int k=0;k<vec2.size();++k){ int l=vec2[k].length(); if((len<2)||(quanxian[len-2]!=':')){ int id=qxmingdan[quanxian]; if(id==10){ string a=vec2[k]; if(a==quanxian){ flag=true; puts("true"); break; } }else{ if(l<2) continue; string a=vec2[k].substr(0,l-2); int s=vec2[k][l-1]-'0'; if(a==quanxian){ if(max<s){ max=s; shu=1; continue; } } } }else{ if(l<2) continue; string a=vec2[k].substr(0,l-2); string b=quanxian.substr(0,len-2); if(a==b){ if(vec2[k][l-1]>=quanxian[len-1]){ flag=true; puts("true"); break; } } } } if(flag) break; } if(flag) continue; if(shu){ printf("%d\n",max); continue; } puts("false"); } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-16661.html

    最新回复(0)