#include<bits/stdc++.h>
#define ll long long
using namespace std;
int p,r,u,num,q,mx=-1,mxx;
map<string,vector<string>>role,user;
map<string,int>recond;
int judge(string s,string s1)
{
auto it=s.find(":"),its=s1.find(":");
if(it==s.npos&&its==s1.npos)return -1;
if(it==s.npos&&its!=s1.npos)return -1;
string ts=s.substr(0,it),ts1=s1.substr(0,its);
if(ts!=ts1) return -1;
if(it!=s.npos&&its==s1.npos)
return stoi(s.substr(it+1));
string num=s.substr(it+1),num1=s1.substr(it+1);
if(stoi(num)>=stoi(num1)) return -2;
else return -1;
}
int process1(string s,string s1)
{
if(role.find(s)==role.end()) return -1;
vector<string> t=role[s];
for(int j=0;j<t.size();j++)
{
int q=judge(t[j],s1);
if(q>=0)
mx=max(mx,q);
if(q==-2||t[j]==s1)
return -2;
}
if(mx!=-1)
return mx;
return -1;
}
int process(string s,string s1)
{
bool f=0;
if(user.find(s)==user.end()) return -1;
vector<string> t=user[s];
for(int j=0;j<t.size();j++)
{
int d=process1(t[j],s1);
if(d==-2)
return d;
if(d>=0)
mxx=max(d,mxx);
}
if(mxx!=-1)
return mxx;
return -1;
}
int main()
{
string s,s1;
cin>>p;
for(int i=0;i<p;i++)
cin>>s;
cin>>r;
for(int i=0;i<r;i++)
{
cin>>s>>num;
for(int j=0;j<num;j++)
{
cin>>s1;
role[s].push_back(s1);
}
}
cin>>u;
for(int i=0;i<u;i++)
{
cin>>s>>num;
for(int j=0;j<num;j++)
{
cin>>s1;
user[s].push_back(s1);
}
}
cin>>q;
for(int i=0;i<q;i++)
{
mx=-1;
mxx=-1;
cin>>s>>s1;
int d=process(s,s1);
if(d==-2)
cout<<"true"<<endl;
else if(d>=0)
cout<<d<<endl;
else cout<<"false"<<endl;
}
return 0;
}
201612-3 权限查询
最新推荐文章于 2025-06-13 18:42:42 发布