CCF CSP 202206-3角色授权【70分】

2023-11-05

#include<bits/stdc++.h>
using namespace std;
struct Res{
    vector<string> op;      //操作
    vector<string> res_type;//资源种类 
    vector<string> res_name;//资源名称描述 
};
map<string, vector<string> >group2role;
map<string, vector<string> >user2role;
map<string, Res >roles;
//判断role 能否提供操作类型op,资源种类tp,资源名称name的权限
bool check(string op,string tp,string name,string role) {
    Res res=roles[role];
    bool ok=false;
    for(auto o:res.op) {
        if(o=="*"||o==op) {ok=true;break;}
    }
    if(ok==false) return false;
    ok=false;
    for(auto t:res.res_type) {
        if(t=="*"||t==tp) {ok=true;break;}
    }
    if(ok==false) return false;
    ok=false;
    if(res.res_name.size()==0) return true;
    for(auto na:res.res_name) {
        if(na==name) {ok=true;break;}
    }
    return ok;
}
int main() {
    int n,m,q;
    cin>>n>>m>>q;
    for(int i=0;i<n;i++) {
        string str,tmp;
        Res r;
        cin>>str;
        int nv,no,nn;
        cin>>nv;
        for(int j=0;j<nv;j++) {
            cin>>tmp;
            r.op.push_back(tmp);
        }
        cin>>no;
        for(int j=0;j<no;j++) {
            cin>>tmp;
            r.res_type.push_back(tmp);
        }
        cin>>nn;
        for(int j=0;j<nn;j++) {
            cin>>tmp;
            r.res_name.push_back(tmp);
        }
        roles[str]=r;
    }
    

    for(int i=0;i<m;i++) {
        string str,tmp,tp;
        int ns;
        cin>>str>>ns;
        for(int j=0;j<ns;j++) {
            cin>>tp>>tmp;
            if(tp=="g") {
                group2role[tmp].push_back(str);
            } else {
                user2role[tmp].push_back(str);
            }
        }
    }

    for(int i=0;i<q;i++) {
        vector<string>groups;
        string user;
        int ng;
        bool ok=false;
        cin>>user>>ng;
        for(int j=0;j<ng;j++) {
            string tmp;
            cin>>tmp;
            groups.push_back(tmp);
        }
        string op,tp,name;
        cin>>op>>tp>>name;
        // 遍历关联user的所有角色
        for(auto role:user2role[user]) {
            if(check(op,tp,name,role)) {ok=true;break;}
        }
        for(auto group:groups) {
            for(auto role:group2role[group]) {
                if(check(op,tp,name,role)) {ok=true;break;}
            }
        }
        if(ok) cout<<1<<endl;
        else cout<<0<<endl;
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CCF CSP 202206-3角色授权【70分】 的相关文章

随机推荐

  • cocos2dx opengl入门系列二-画一个三角形

    运行环境 mac10 12 2 xcode Version 8 2 1 cocos2dx x 3 13 1 代码 新建cocos2dx项目 具体操作官网有教程 新建好后 新建Test cpp 代码如下 Test cpp FirstTrian
  • 时序预测

    时序预测 MATLAB实现基于EMD GRU时间序列预测 EMD分解结合GRU门控循环单元 目录 时序预测 MATLAB实现基于EMD GRU时间序列预测 EMD分解结合GRU门控循环单元 效果一览 基本描述 模型描述 程序设计 参考资料
  • 【MySQL】数据处理函数

    函数 文本处理函数 日期和时间处理函数 数值处理函数 函数 SQL支持利用函数来处理数据 但是函数的可移植性不强 如果决定使用函数应该保证做好代码注释 以便以后能确切地知道所编写SQL代码的含义 大多SQL实现支持以下类型的函数 用于处理文
  • com.aspose.words 类LoadOptions

    com aspose words 类LoadOptions java lang Object com aspose words LoadOptions 直接已知子类 HtmlLoadOptions PdfLoadOptions RtfLoa
  • react native 上拖拽元素

    1 给一张效果图 2 具体代码如下 使用的就是react native里面的PanResponder 具体使用看 官网 这里主要两个知识点Animated 和 panResponder 我在componentDidMount初始 panRe
  • 企微外部群Api

    个人微信开发API 文档地址 wkteam gitbook io 所有个人号模块分析 登录模块 登录微控平台 member login 获取微信二维码 user login 执行微信登录 getIPadLoginInfo 获取联系人列表 群
  • Xpath和CSS选择器的使用详解

    Xpath与CSS选择器在爬虫中非常常见 下列我将描述一下它们的使用详情 安装Xpath和CSS选择器 Windows平台 pip install lxml Ubuntu平台 sudo apt get install python3 lxm
  • js的作用域和vue的作用域

    js有两种作用域 全局作用域和局部作用域 1 全局作用域 如果一个变量在所有函数外声明 那么就定义了一个全局作用域 2 局部作用域 有两种 函数作用域和块级作用域 函数作用域顾名思义就是在函数内定义的变量 而块级作用域则是 内let声明的变
  • 【Linux】几种典型的IO模型

    几种典型的IO模型 常见IO场景 输入和输出 读写文件 read write fread fwrite 网络接收与发送 send recv sendto recvfrom 上述两种场景都有一个共同点 就是最终都会和操作系统打交道 IO过程
  • python高级特性总结之切片 迭代 生成器 迭代器

    切片 gt gt gt L list range 100 gt gt gt L 0 1 2 3 99 gt gt gt L 10 0 1 2 3 4 5 6 7 8 9 gt gt gt L 10 90 91 92 93 94 95 96
  • PlantCV 农业自动化中的机器视觉库

    PlantCV 农业自动化中的机器视觉库 2020年下半年 各大互联网巨头纷纷进军社区买菜市场 我身边的朋友同事很多都开始通过新的电商生鲜渠道购买蔬菜 当时我就觉得 大资本即将涌入我们的第一产业 农业 果不其然 2020年12月31号 正值
  • Dell PowerEdge R740xd解析:服务器只看参数那就错了

    昨天写了 Dell PowerEdge R940解析 四路顶配服务器维护平民化 今天继续 对于R7x0这样的2U主力服务器机型 说实话我觉得不是特别好写 一方面不如四路有特点 另外又是互联网等行业消耗最多的 可以说乃服务器厂商必争之地 正如
  • Ubuntu下安装Chrome浏览器

    一 下载包 通过直接下载安装Google Chrome浏览器deb包 打开Ubuntu终端 以下为32位版本 使用下面的命令 wget https dl google com linux direct google chrome stabl
  • 模拟相机视频输入方案-----模拟转MIPI /DVP方案

    技术交流 请加微信video D 概述 由于模拟相机在监控领域的优势 以及模拟相机成本优势 目前模拟相机方案需求还是很多的 具体模拟解码芯片介绍 目前接触的有以下几种 1 Nextchip系列 韩国NEXTCHIP系列 主攻ISP AHD
  • 开发微信公众号支付代码

    一 url传入当前页面url地址或者微信公众平台配置的域名根目录 使用window location href方法获取 二 下面代码请结合微信公众号开发文档 微信公众号开发文档 function test url uni request u
  • 如何在Linux下安装vim编辑器

    目前的Ubuntu版本都安装了vi编辑器 vim编辑器可以看做vi编辑器的升级版 可以识别特殊字符 显示不同颜色 目录 第一步 第二步 第三步 第四步 第一步 在terminal里面输入vi命令后按下tab键可以看到当前vi可以执行的命令
  • 算法的时间及空间复杂度

    简介 java系列技术分享 持续更新中 初衷 一起学习 一起进步 坚持不懈 如果文章内容有误与您的想法不一致 欢迎大家在评论区指正 希望这篇文章对你有所帮助 欢迎点赞 收藏 留言 更多文章请点击 文章目录 一 什么是算法 二 算法初体验 案
  • C++ String替换&分割指定字符串

    C String替换 分割指定字符串 1 C String替换指定字符串 C 的string对象提供了replace方法来实现字符串的替换 本文实现对于将字符串中某个字符串全部替换的功能 string replace all string
  • MOOC清华《程序设计基础》第5章:求n的阶乘(用递推法做)

    使用递推思想 求解正整数的阶乘 本算法的数学模型为 n n 1 n include
  • CCF CSP 202206-3角色授权【70分】

    include