CCF 权限查询

博客内容概述:本文主要介绍了如何实现CCF(中国计算机学会)的权限查询系统,通过构建一系列的结构体来存储数据,并详细阐述了如何逐个查询这些结构体以满足不同的权限查询需求。
摘要由CSDN通过智能技术生成

题意官网有,大致思路就是整一堆结构体,存起来 挨个查就行了

#include <bits/stdc++.h>
using namespace std;
struct qx{
	string name;
	int level = 0;
};
struct js{
	string name;
	vector<qx> jqx;
};
struct user{
	string name;
	vector<js> ujs;
};
int p,r,u,num;
vector<qx> mqx;
vector<js> mjs;
vector<user> muser;

void Init_qx(qx &temp,string &s){
	
	int pos= s.find(':');
		if(pos != string::npos){
			int t = s.find(':') + 1;
			temp.level = s[t]-'0';
			temp.name = s.substr(0,pos);
 		}
 		else{
 			temp.level = -1;
 			temp.name = s;
		 } 
		
}
int find_js(string name){
	for(int i = 0; i < mjs.size(); i++)
		if(mjs[i].name == name) return i;
	return -1;
}
int find_user(string name){
	for(int i = 0; i < muser.size(); i++)
		if(muser[i].name == name) return i;
	return -1;
}
int find_(user &temp, qx &quxi){
	for(int i = 0; i < temp.ujs.size(); i++){
		for(int j = 0; j < temp.ujs[i].jqx.size(); j++){
			if(temp.ujs[i].jqx[j].name == quxi.name &&
				temp.ujs[i].jqx[j].level >= quxi.level)
				return 1;				
			}
		}
	return 0;
}
int main(){
	//freopen("1.txt","r",stdin);
	cin >> p;
	string s;
	for(int i = 0; i < p; i++){
		cin >> s;qx temp;
		Init_qx(temp,s);
		mqx.push_back(temp);
	}
	cin >> r;
	for(int i = 0; i < r; i++){
		js jtemp;
		qx qtemp;
	
		cin >> jtemp.name >> num;
		while(num--){
			cin >> s;
			Init_qx(qtemp,s);
			jtemp.jqx.push_back(qtemp);
		}
		mjs.push_back(jtemp);
	}
	cin >> u;
	for(int i = 0; i < u; i++){
		user utemp;
		js jtemp;
		string name;
		cin >> utemp.name >> num;
		while(num--){
			cin >> name;
			utemp.ujs.push_back(mjs[find_js(name)]);
		}
			
		muser.push_back(utemp);
	}
	int cha; cin >> cha;
	while(cha--){
		string name;
		qx quxi;
		cin >> name >> s;
		bool flag = false;
		if(s.find(':') != string::npos) flag = true;
		user temp;
		int ttemp = find_user(name);
		if(ttemp == -1){
			cout << "false\n";
			continue;
		}
		else{
			temp = muser[ttemp];
			Init_qx(quxi,s);
		if(flag == false){
			int n = -2;
			for(int i = 0; i < temp.ujs.size(); i++){
				for(int j = 0; j < temp.ujs[i].jqx.size(); j++){
					if(temp.ujs[i].jqx[j].name == quxi.name){
						quxi.level = max(temp.ujs[i].jqx[j].level,quxi.level);
						n = quxi.level;
					}
				}
			}
			
			if(n == -2) cout << "false\n";
			else if(n == -1) cout << "true\n";
			else cout << n << "\n";
		}
		else{
			if(find_(temp,quxi)) cout << "true\n";
			else cout << "false\n";
		}
		}
		
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,"Cannot determine archive format of C:\Users\shi\AppData\Local\Temp\pip-req-build-3ccf01ho"是一个错误信息,表明无法确定指定路径下的文件的归档格式。这个错误可能是由于文件损坏或格式错误导致的。要解决这个问题,可以尝试以下几个方法: 1. 确保文件路径正确:检查文件路径是否正确拼写,确保路径中没有任何错误。 2. 检查文件是否存在:确认指定路径下的文件是否存在,如果文件不存在,可能需要重新下载或获取正确的文件。 3. 检查文件完整性:确认文件没有被意外损坏或修改。可以尝试重新下载文件,并确保下载的文件没有被修改。 4. 检查文件格式:确认文件是有效的归档格式。不同的文件可能有不同的归档格式,比如zip、tar等。确保文件的归档格式与你的操作系统和软件兼容。 如果上述方法都没有解决问题,可能需要进一步排查其他可能的原因,比如网络连接问题、权限问题等。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ERROR: Cannot determine archive format of PyQt5](https://blog.csdn.net/corelengine/article/details/108557820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值