首页 > 其他分享 >CSP 202206-3 角色授权

CSP 202206-3 角色授权

时间:2023-05-28 11:13:06浏览次数:36  
标签:tmp cha 202206 end int CSP 授权 id con

链接

大模拟,用了 map,但是 TLE 了;好在有部分分,能得80.

代码如下
#include<bits/stdc++.h>
using namespace std;
int const N=5005, M=505;
int n,m,q,ID[M];	// ID[关联编号] = 角色编号 
string curname, curop, curkd, curnm; // 当前操作的 用户,操作,资源种类,资源名称 
map<string, int> chaname2chaid;
//vector<int> cocha; // 当前操作关联的角色 
map<string, int> curgroups; // 当前操作涉及到的用户组 
//角色 
struct Chara{
	string name;
	map<string, int> op, kd, nm; //操作,资源种类,资源名称
}cha[M];
//关联
struct Connection{
	string cname;
	map<string, int> users;
	vector<string> ugroups;
//	vector<pair<int, string> > object; // pair<类型,名称>,类型 0 表示用户,类型 1 表示用户组 
}con[M]; 
bool can(int id) // 第 id 个角色是否能执行操作 
{
	string star = "*";
	if((cha[id].op.find(curop) == cha[id].op.end()) && (cha[id].op.find(star) == cha[id].op.end()))
		return 0;
	else if((cha[id].kd.find(curkd) == cha[id].kd.end()) && (cha[id].kd.find(star) == cha[id].kd.end()))
		return 0;
	else if((cha[id].nm.find(curnm) == cha[id].nm.end()) && (cha[id].nm.size() > 0))
		return 0;
	else return 1;
}
bool findcha()
{
	for(int i=1;i<=m;i++)	// 遍历每个关联 
	{
		if(con[i].users.find(curname) != con[i].users.end())	// user
		{
			if(ID[i]>-1)
			{
				if(can(ID[i])) return 1;
			}
			continue;
		}
		//遍历这个关联的每个用户组
		for(vector<string>::iterator it = con[i].ugroups.begin(); it!=con[i].ugroups.end(); it++)
		{
			if(curgroups.find((*it)) != curgroups.end())	// ugroup
			{
				if(ID[i]>-1)
				{
					if(can(ID[i])) return 1;
				}
				break;
			}
		}
	}
	return 0;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n>>m>>q;
	string tmp;
	// 角色 
	for(int i=1,nv,no,nn;i<=n;i++)
	{
		cin>>cha[i].name>>nv;
		chaname2chaid[cha[i].name] = i;
		for(int j=1;j<=nv;j++)
		{
			cin>>tmp;
			cha[i].op[tmp]=1;
		}
		cin>>no;
		for(int j=1;j<=no;j++)
		{
			cin>>tmp;
			cha[i].kd[tmp]=1;
		}
		cin>>nn;
		for(int j=1;j<=nn;j++)
		{
			cin>>tmp;
			cha[i].nm[tmp]=1;
		}
	}
	string type;
	//关联 
	for(int i=1,ns;i<=m;i++)
	{
		cin>>con[i].cname>>ns;	// cname 是角色名称
		
		if(chaname2chaid.find(con[i].cname) != chaname2chaid.end())
			ID[i] = chaname2chaid[con[i].cname];
		else ID[i] = -1; // 不存在这个角色 
		 
		for(int j=1;j<=ns;j++)
		{
			cin>>type>>tmp;
			if(type[0]=='u') con[i].users[tmp] = 1; // user
			else con[i].ugroups.push_back(tmp); // ugroup
		}
	}
	for(int i=1,ng;i<=q;i++)
	{
		cin>>curname>>ng;
		curgroups.clear();
		for(int j=1;j<=ng;j++)
		{
			cin>>tmp;
			curgroups[tmp]=1;
		}
		cin>>curop>>curkd>>curnm;
		cout<<findcha()<<endl;
	}
	return 0;
}

网上有100分的代码,看来是用 map 直接存用户(组)名到其关联的角色(set), 然后各种 count() 就很快。

标签:tmp,cha,202206,end,int,CSP,授权,id,con
From: https://www.cnblogs.com/Zinn/p/17437913.html

相关文章

  • 企业号运营中如何快速提升授权量,带来商业价值的增长?
    企业号授权量是企业目标客户的重要指标之一,如何快速提升授权量并带来商业价值的增长?以下是几个提升企业号授权量的建议:提供优质服务:企业号作为企业的官方服务平台,需要为用户提供优质的服务,让用户感到贴心,从而提高用户转化为授权用户的概率。优化用户体验:对于企业号的使用者而言,友好......
  • 账户授权管理
    1、前言本文只包括通用流程概括,不涉及具体操作流程;国内的头条、腾讯等基本都是Oauth2.0授权模式;授权管理大致流程申请开发者应用;准备跳转链接,获取授权的auth_code;通过auth_code获取令牌(access_token、refresh_token)等;定时刷新令牌;引用巨量引擎(头条)的授权流程图......
  • 未授权访问漏洞检测工具(CVE-2023-29922)
    ===================================免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。0x01工具介绍PowerJob<=4.3.2......
  • 【游记】2022 CSP-S 游寄
    2023.5.25终于决定放出这段黑历史了既然是游寄,那肯定是寄了。Day0上午打了一场比赛,心态直接到崩了,又拿了一次倒数第一(呜呜,有6个人ak,我才233分)。一点半坐上小巴开往杭州,路上很无聊,想睡但路有点颠簸,头撞的有点痛,于是拿了一本《精神明亮的人》在车上看,反正是看几页眯几眼,最后......
  • 微信小程序授权登录
    需要的数据库字段:openid,nickName,session_key 需要Token,去官网现在jwt的扩展JSONWebTokenLibraries-jwt.io在app下面创建一个server目录接着新建一个Token类下面是封装Token的代码<?phpnamespaceApp\server;useFirebase\JWT\JWK;useFirebase\JWT\JWT;class......
  • 3192. 出现次数最多的数 13年12月CSP
    3192.出现次数最多的数-AcWing题库13年12月CCF计算机软件能力认证,第1题 第一次提交,数据范围写错了,wa,日常迷糊,太久不写题了。第二次提交,试图在一次循环内解决,但忘了判断答案是否为最小的数,wa。 真没必要在螺蛳壳里做道场。在简单题里降低时间复杂度,没有什么实际意义,反而......
  • FX110网:西班牙CNMV警告这6家交易商没有监管授权
    2023年5月22日,西班牙金融监管机构CNMV对6家未经授权的外汇交易商发出警告。根据《证券市场法》第17条第二款(由10月23日第4/2015号皇家法令批准的重订文本),西班牙国家证券市场委员会(ComisiónNacionaldelMercadodeValores)警告,以下公司未获授权提供《西班牙证券市场法》第140......
  • net-core认证和授权
    publicvirtualboolIsAuthenticated{get{return!string.IsNullOrEmpty(_authenticationType);}}登录代码:IList<Claim>calims=newList<Claim>();calims.Add(newClaim("name","ybd"));......
  • Mysql 创建用户与授权
    Mysql创建用户与授权1.创建用户:CREATEUSER'username'@'host'[IDENTIFIEDBY'password'];username:要创建的用户名;host:代表地址;任何地址可以使用%IDENTIFIEDBY'password':设置密码,如果不写则为空密码eg:CREATEUSER'root'@'localhost'IDENTI......
  • csproj OutputType
    csproj<?xmlversion="1.0"encoding="utf-8"?><ProjectToolsVersion="4.0"DefaultTargets="Build"xmlns="http://schemas.microsoft.com/developer/msbuild/2003"><PropertyGroup><C......