ccf权限查询java_CCF|201612-3 权限查询 C++满分实现

#include

#include

#include

using namespace std;

int main()

{

int p, n, t;

string temp, a, b, name;

unordered_map levels;//权限字典,记录权限名以及对应最高权限,最高权限为-1代表无等级权限

unordered_map> roles;//角色字典,记录角色名以及角色拥有的各个权限的最高等级

unordered_map> users;//人物字典,记录了人物以及人物对应的各种权限的最高等级

cin >> p;

while (p--) {//录入权限

cin >> temp;

if (temp.find(':') != temp.npos)

levels[temp.substr(0, temp.length() - 2)] = temp[temp.length() - 1] - 48;

else levels[temp] = -1;

}

cin >> p;

while (p--) {//录入角色,注意如果一个角色拥有数个相同的权限,取权限级别高的

cin >> a >> n;

while (n--) {

cin >> temp;

if (temp.find(':') != temp.npos) {

name = temp.substr(0, temp.length() - 2);

t = temp[temp.length() - 1] - 48;

if (roles[a].find(name) != roles[a].end() && t > roles[a][name] || roles[a].find(name) == roles[a].end())

roles[a][name] = t;

}

else roles[a][temp] = -1;

}

}

cin >> p;

while (p--) {//录入人物,同时将人物所拥有的各个角色的权限复制给人物,注意取最大值

cin >> a >> n;

while (n--) {

cin >> temp;

unordered_map::iterator iter = roles[temp].begin();

while (iter != roles[temp].end()) {

if (users[a].find(iter->first) == users[a].end()) users[a][iter->first] = iter->second;

else {

if (iter->second != -1 && iter->second > users[a][iter->first])

users[a][iter->first] = iter->second;

}

iter++;

}

}

}

cin >> p;

while (p--) {//进行查询

cin >> a >> b;

if (b.find(':') != b.npos) {//对于含权限级别的查询

name = b.substr(0, b.length() - 2);

t = b[b.length() - 1] - 48;//只有人物拥有该权限且等级大于等于查询等级时才真

if (users[a].find(name) != users[a].end() && users[a][name] >= t)

cout << "true" << endl;

else cout << "false" << endl;

}

else {//当查询的是无等级权限且存在于人物权限表时,才为真

if (levels[b] == -1 && users[a].find(b) != users[a].end()) cout << "true" << endl;

else if (users[a].find(b) != users[a].end())cout << users[a][b] << endl;//用户拥有该权限才输出权限值

else cout << "false" << endl;

}

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是第一段代码的解答: ccf201703-2是一个关于学生移位操作的问题。代码中使用了结构体来存储学生的编号和他在队伍中的位置,并通过重载运算符来对学生元素按照位置进行排序。首先,输入学生的数量n,并初始化一个vector来存储学生的信息。然后,根据学生的数量循环输入每个学生的编号和初始位置,并将其添加到vector中。接下来,输入移位操作的次数m,并循环输入每个移位操作的目标学生编号和移动的位置。根据目标学生编号,找到对应的学生在vector中的位置,并将其位置更新为目标位置。如果目标位置大于0,则将其前面的学生位置都减1;如果目标位置小于0,则将其后面的学生位置都加1。最后,对vector进行排序,并输出排序后的学生编号。 请注意,这段代码中使用了C++的一些语法和库函数,需要在编译时包含相关的头文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CCF:201703-2 学生排队](https://blog.csdn.net/weixin_42729072/article/details/105435070)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [第十次ccf 学生排队](https://blog.csdn.net/xiaoli_nu/article/details/65468043)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [CCF-CSP 201703-2学生排队 一维数组满分题解](https://blog.csdn.net/m0_53641110/article/details/121446439)[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^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值