CCF-CSP题解 201612-3 权限查询
一共有三层信息,三层信息的依赖关系是:
\]
先存储\(authority\)信息,\(role\)直接存储\(authority\)对应序号的信息,\(user\)通过\(role\)直接存储的是\(authority\)对应序号的信息。
剩下的就是字符串处理了。
唯一的坑点大概就是查询的时候\(user\)和\(authority\)名字可能没有出现过。
#include <bits/stdc++.h>
const int maxn = 100;
using namespace std;
struct tAuthority
{
char category[40];
bool hasLevel;
int level;
};
tAuthority authority[maxn + 5];
struct tRole
{
char role[40];
bool hasAuthority[maxn + 5];
int level[maxn + 5];
tRole()
{
memset(hasAuthority, 0, sizeof(hasAuthority));
memset(level, -1, sizeof(level));
}
};
tRole role[maxn + 5];
struct tUser
{
char user[40];
bool hasAuthority[maxn + 5];
int level[maxn + 5];
tUser()
{
memset(hasAuthority, 0, sizeof(hasAuthority));
memset(level, -1, sizeof(level));
}
};
tUser user[maxn + 5];
int main()
{
int p;
scanf("%d", &p);
for (int i = 1; i <= p; i++)
{
char temp[40];
scanf("%s", temp);
int len = strlen(temp);
if (temp[len - 2] == ':')
{
authority[i].hasLevel = true;
authority[i].level = temp[len - 1] - '0';
temp[len - 2] = '\0';
}
else
{
authority[i].hasLevel = false;
}
strcpy(authority[i].category, temp);
}
int r;
scanf("%d", &r);
for (int i = 1; i <= r; i++)
{
scanf("%s", role[i].role);
int s;
scanf("%d", &s);
while (s--)
{
char temp[40];
scanf("%s", temp);
int len = strlen(temp);
if (temp[len - 2] == ':')
{
temp[len - 2] = '\0';
}
for (int j = 1; j <= p; j++)
{
if (strcmp(authority[j].category, temp) == 0)
{
role[i].hasAuthority[j] = true;
if (temp[len - 1] >= '0' && temp[len - 1] <= '9')
role[i].level[j] = max(role[i].level[j], temp[len - 1] - '0');
break;
}
}
}
}
int u;
scanf("%d", &u);
for (int i = 1; i <= u; i++)
{
scanf("%s", user[i].user);
int t;
scanf("%d", &t);
while (t--)
{
char temp[40];
scanf("%s", temp);
for (int j = 1; j <= r; j++)
{
if (strcmp(role[j].role, temp) == 0)
{
for (int k = 1; k <= p; k++)
{
if (role[j].hasAuthority[k])
{
user[i].hasAuthority[k] = true;
user[i].level[k] = max(user[i].level[k], role[j].level[k]);
}
}
break;
}
}
}
}
int q;
scanf("%d", &q);
while (q--)
{
char temp1[40], temp2[40];
bool flag1 = false, flag2 = false;
scanf("%s%s", temp1, temp2);
int len = strlen(temp2);
if (temp2[len - 2] == ':')
temp2[len - 2] = '\0';
for (int i = 1; i <= u; i++)
{
if (strcmp(user[i].user, temp1) == 0)
{
flag1 = true;
int id = 0;
for (; id <= p && strcmp(authority[id].category, temp2) != 0; id++);
if (id <= p)
{
flag2 = true;
// printf("query case: %d %d %s\n", i, id, authority[id].category);
if (user[i].hasAuthority[id])
{
if (temp2[len - 1] >= '0' && temp2[len - 1] <= '9')
{
if (user[i].level[id] >= temp2[len - 1] - '0')
printf("true\n");
else
printf("false\n");
}
else
{
if (authority[id].hasLevel)
printf("%d\n", user[i].level[id]);
else
printf("true\n");
}
}
else
{
printf("false\n");
}
}
break;
}
}
if (!flag1 || !flag2)
printf("false\n");
}
return 0;
}
CCF-CSP题解 201612-3 权限查询的更多相关文章
- CCF CSP 201612-3 权限查询
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201612-3 权限查询 问题描述 授权 (authorization) 是各类业务系统不可缺 ...
- CCF CSP 201709-3 JSON查询
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-3 JSON查询 问题描述 JSON (JavaScript Object Not ...
- ccf 201612-3 权限查询
ccf 201612-3 权限查询 解题思路: 建立一个二维矩阵存储权限和角色 还差30分emmm #include<iostream> #include<cstring> ...
- CCF 权限查询(模拟)
试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统 ...
- CSP 201612-3 权限查询 【模拟+STL】
201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权 ...
- CCF CSP 201403-2 窗口
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-2 窗口 问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标 ...
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- CCF CSP 201312-3 最大的矩形
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...
- CCF CSP 201609-3 炉石传说
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...
- CCF CSP 201403-3 命令行选项
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...
随机推荐
- windows版的mysql主从复制环境搭建
背景 最近在学习用Spring Aop来实现数据库读写分离的功能. 在编写代码之前,首先是要部署好mysql的环境,因为要实现读写分离,所以至少需要部署两个mysql实例,一主一从,并且主从实例之间能 ...
- 程序员修神之路--kubernetes是微服务发展的必然产物
菜菜哥,我昨天又请假出去面试了 战况如何呀? 多数面试题回答的还行,但是最后让我介绍微服务和kubernetes的时候,挂了 话说微服务和kubernetes内容确实挺多的 那你给我大体介绍一下呗 可 ...
- ArcGIS 用QueryTask查询上限1000的问题
1.打开ArcGIS Server找到自己发布的服务,右键Service Properties,左侧点击Parameters,右侧有一个Maximum number of records return ...
- tensorflow学习笔记——模型持久化的原理,将CKPT转为pb文件,使用pb模型预测
由题目就可以看出,本节内容分为三部分,第一部分就是如何将训练好的模型持久化,并学习模型持久化的原理,第二部分就是如何将CKPT转化为pb文件,第三部分就是如何使用pb模型进行预测. 一,模型持久化 为 ...
- (四十四)golang--协程(goroutine)和管道(channel)相结合实例
统计1-8000之间的素数. 整体框架: 说明:有五个协程,三个管道.其中一个协程用于写入数字到intChan管道中,另外四个用于取出intChan管道中的数字并判断是否是素数,然后将素数写入到pri ...
- python接口自动化测试——简单的文件上传代码实现,人人网登陆后上传图片举例
import requests '''人人网登陆,图片上传 '''def loginData(): '''登录请求参数''' data = { 'email': '13484545195', 'ico ...
- urllib练习
# coding = utf-8 """ 解析https://www.kuaidaili.com/free/网站里的代理地址, 并测试是否可用 ""& ...
- Git实战指南----跟着haibiscuit学Git(第一篇)
笔名: haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...
- P3954 成绩
题目描述 牛牛最近学习了C++入门课程,这门课程的总成绩计算方法是: 总成绩=作业成绩\times 20\%+×20%+小测成绩×30\%+×30%+期末考试成绩\times 50\%×50% 牛牛想 ...
- (python)查看糗事百科文字 点赞 作者 等级 评论
import requestsimport reheaders = { 'User-Agent':'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; ...