202206-3 角色授权

2023-11-17

第三题:
题干:角色授权
在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
struct Character_Class{//角色的能力 
	string name;
	map<string,int> opt;//操作清单
	map<string,int> zz;//资源种类清单
	map<string,int> zm;//资源名称清单
}Character[600];
map<string,int> name_CID;
map<string,vector<int> > Uname_CID;
int n,m,q;
int nv,no,nn,ns,ng;
string s;
string uname;
string ugroup[500];
string wopt,wzz,wzm;
bool check(int cid,string o,string z,string m){
	if((Character[cid].opt.count(o)&&Character[cid].opt[o]==1)||
	(Character[cid].opt.count("*")&&Character[cid].opt["*"]==1)){
		if((Character[cid].zz.count(z)&&Character[cid].zz[z]==1)||
		(Character[cid].zz.count("*")&&Character[cid].zz["*"]==1)){
			if((Character[cid].zm.count(m)&&Character[cid].zm[m]==1)||
			(Character[cid].zm.size()==0)){
				return 1;
			}
		}
	}
	return 0;
}
signed main()
{
	cin>>n>>m>>q;
	for(int i=1;i<=n;i++){
		cin>>Character[i].name;
		name_CID[Character[i].name]=i;
		cin>>nv;
		for(int j=1;j<=nv;j++){
			cin>>s;
			Character[i].opt[s]=1;
		}
		cin>>no;
		for(int j=1;j<=no;j++){
			cin>>s;
			Character[i].zz[s]=1; 
		} 
		cin>>nn;
		for(int j=1;j<=nn;j++){
			cin>>s;
			Character[i].zm[s]=1;
		}
	}
	for(int i=1;i<=m;i++){
		cin>>s;
		int CID=name_CID[s];
		cin>>ns;
		for(int j=1;j<=ns;j++){
			cin>>s;
			cin>>s;
			Uname_CID[s].push_back(CID);
		}
	}
	for(int i=1;i<=q;i++){
		cin>>uname;
		cin>>ng;
		for(int j=1;j<=ng;j++){
			cin>>ugroup[j];
		}
		cin>>wopt>>wzz>>wzm;
		int flag=0;
		for(int j=0;j<Uname_CID[uname].size();j++){
			int id=Uname_CID[uname][j];
			if(check(id,wopt,wzz,wzm)){
				flag=1;
				break;
			}
		}
		if(!flag){
			for(int j=1;j<=ng;j++){
				if(flag) break;
				for(int k=0;k<Uname_CID[ugroup[j]].size();k++){
					int id=Uname_CID[ugroup[j]][k];
					if(check(id,wopt,wzz,wzm)){
						flag=1;
						break;
					}
				}	
			} 
		}
		cout<<flag<<endl;
	}
	
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

202206-3 角色授权 的相关文章

  • IdentityServer 4 对它的工作原理感到困惑

    我阅读和观看了很多有关 Identity Server 4 的内容 但我仍然对它有点困惑 因为似乎有很多移动部件 我现在明白这是一个单独的项目 它处理用户身份验证 我仍然不明白的是用户如何注册它 谁存储用户名 密码 我打算进行此设置 Rea
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 函数参数的默认参数是否被视为该参数的初始值设定项?

    假设我有这样的函数声明 static const int R 0 static const int I 0 void f const int r R void g int i I 根据 dcl fct default 1 如果在参数声明中指
  • File.AppendText 尝试写入错误的位置

    我有一个 C 控制台应用程序 它作为 Windows 任务计划程序中的计划任务运行 此控制台应用程序写入日志文件 该日志文件在调试模式下运行时会创建并写入应用程序文件夹本身内的文件 但是 当它在任务计划程序中运行时 它会抛出一个错误 指出访
  • 类型约束

    我有以下类层次结构 class Header IEnumerable
  • 启动时的 Excel 加载项

    我正在使用 Visual C 创建 Microsoft Excel 的加载项 当我第一次创建解决方案时 它包含一个名为 ThisAddIn Startup 的函数 我在这个函数中添加了以下代码 private void ThisAddIn
  • 识别 Visual Studio 中的重载运算符 (c++)

    有没有办法使用 Visual Studio 快速直观地识别 C 中的重载运算符 在我看来 C 中的一大问题是不知道您正在使用的运算符是否已重载 Visual Studio 或某些第三方工具中是否有某些功能可以自动突出显示重载运算符或对重载运
  • 使用valgrind进行GDB远程调试

    如果我使用远程调试gdb我连接到gdbserver using target remote host 2345 如果我使用 valgrind 和 gdb 调试内存错误 以中断无效内存访问 我会使用 target remote vgdb 启动
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable
  • 在 NaN 情况下 to_string() 可以返回什么

    我使用 VS 2012 遇到了非常令人恼火的行为 有时我的浮点数是 NaN auto dbgHelp std to string myFloat dbgHelp最终包含5008角色 你不能发明这个东西 其中大部分为0 最终结果是 0 INF
  • 为什么这个二维指针表示法有效,而另一个则无效[重复]

    这个问题在这里已经有答案了 这里我编写了一段代码来打印 3x3 矩阵的对角线值之和 这里我必须将矩阵传递给函数 矩阵被传递给指针数组 代码可以工作 但问题是我必须编写参数的方式如下 int mat 3 以下导致程序崩溃 int mat 3
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • Unity:通过拦截将两个接口注册为一个单例

    我有一个实现两个接口的类 我想对该类的方法应用拦截 我正在遵循中的建议Unity 将两个接口注册为一个单例 https stackoverflow com questions 1394650 unity register two inter
  • C++ new * char 不为空

    我有一个问题 我在 ASIO 中开发服务器 数据包采用尖头字符 当我创建新字符时 例如char buffer new char 128 我必须手动将其清理为空 By for int i 0 i lt 128 i buffer i 0x00
  • 实体框架中的“it”是什么

    如果以前有人问过这个问题 请原谅我 但我的任何搜索中都没有出现 它 我有两个数据库表 Person 和 Employee 对每个类型的表进行建模 例如 Employee is a Person 在我的 edmx 设计器中 我定义了一个实体
  • 在 Windows Phone silverlight 8.1 上接收 WNS 推送通知

    我有 Windows Phone 8 1 silverlight 应用程序 我想使用新框架 WNS 接收通知 我在 package appxmanifest 中有
  • 使用 C 在 OS X 中获取其他进程的 argv

    我想获得其他进程的argv 例如ps 我使用的是在 Intel 或 PowerPC 上运行的 Mac OS X 10 4 11 首先 我阅读了 ps 和 man kvm 的代码 然后编写了一些 C 代码 include
  • 我可以在“字节数”设置为零的情况下调用 memcpy() 和 memmove() 吗?

    当我实际上没有什么可以移动 复制的时候 我是否需要处理这些情况memmove memcpy 作为边缘情况 int numberOfBytes if numberOfBytes 0 memmove dest source numberOfBy
  • Objective-C / C 给出枚举默认值

    我在某处读到过关于给枚举默认值的内容 如下所示 typedef enum MarketNavigationTypeNone 0 MarketNavigationTypeHeirachy 1 MarketNavigationTypeMarke
  • 不区分大小写的字符串比较 C++ [重复]

    这个问题在这里已经有答案了 我知道有一些方法可以进行忽略大小写的比较 其中涉及遍历字符串或一个good one https stackoverflow com questions 11635 case insensitive string

随机推荐