【笔试练习】深信服校园招聘c/c 软件开发H卷

题目链接

一、填空题

  1. 如图所示,平面上有两条平行的线段,上面的线段有A0~A3 4个点,下面的线段有B0到B5 6个点,现在需要把所有的点都连接起来,有如下约束:

    每个端点,都至少有一条到另一平行线上端点的连线;
    连线之间不能有交叉(除了端点,线与线之间不能有连接的地方);

    请问,总共有多少种连法?
    在这里插入图片描述

    答案:231

二、编程题

1. 访问权限

题目
JSON是一种可以用来保存配置的数据格式,其结构为树状。JSON中某个子节点的位置可以JSON路径的形式表示,JSON路径类似UNIX文件路径,以’/'分隔父子节点名。JSON路径中不会出现空格。
如下JSON值中
mem – daemons – findme
| |- waccd
|
|- apps – appd

findme子节点的JSON路径为: /mem/daemons/findme
appd子节点的JSON路径为:/mem/apps/appd
waccd子节点的JSON路径为:/mem/daemons/waccd
有一个列表用来描述各JSON子节点是否允许用户编辑。如下:
Y /mem/daemons/findme
N /mem/daemons
Y /mem

如果有设置用户对某个子节点的权限,则实际权限为该设定权限,否则继承其父节点的可访问性,对根节点的默认访问权限为N。

输入描述
第一行为一个正整数N,表示接下来有N行数据(0 < N < 100)
第2行到第N+1行,为字符串Path,表示待检查访问权限的JSON路径。
第N+2行为一个正整数T,表示接下来有T行数据(0 < T < 1000)
接下来会有T行数据,格式为"权限 JSON路径"。
权限有两种取值:Y和N
JSON路径最大长度为256
输出描述
输出“权限”,权限表示该节点的实际访问权限。
示例1
输入例子:
1
/mem/total
3
Y /mem/daemons/findme
N /mem/daemons
Y /mem

输出例子:
Y

思路——前缀树

将字符串 /mem/start拆分成 mem、start 两单词, 每个单词为一个前缀。

  • 前缀树的属性

    • 当前文件夹是否有权限
    • 当前文件夹是否是继承父目录的权限
    • 当前文件夹的子目录
    • 当前文件夹的名字
  • 前缀树的操作

    • 插入
    • 查询
    • 更新所有文件夹的权限信息
  • 主程序读入所有信息

    • 将待查询的信息,先存在一个 vector 中
    • 将其余信息用于构建前缀树
  • 构建前缀树的过程

    • vector<string> str 保存路径的名字信息(利用函数拆分字符串)
    • 检查map中是否有 str[i] 这个文件夹的名字, 如果没有, 则创建一个文件夹,并赋予父目录的权限
    • node 指向 map[str[i]] 这个节点
  • 查询前缀树的过程:

    • 逐个判断path 中的名字是否在前缀树出现
    • 如果没有出现,则返回当前 node 的权限

代码:

#include<iostream>
#include<vector>
#include<map>
#include<unordered_map>
using namespace std;

class Trie {
   
public:
    bool hava_Authority = false; 
    bool isInherient = true; // 当前节点的权限是不是继承父节点的
    unordered_map<string, Trie*> ls; // 孩子节点
    string name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值