首页 > 试题广场 >

访问权限

[编程题]访问权限
  • 热度指数:860 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
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
num_to_check = int(input().strip())
if num_to_check <= 0:
    print("N")
to_checks = []
for i in range(0, num_to_check):
    to_checks.append(input().strip())
t = int(input().strip())
paths = dict()
for i in range(0, t):
    k, v = input().strip().split(" ")
    try:
                # 测试用例竟然不是以最后一次设置的权限为准?
                # 还是意思是设置为N的权限就不准再更改了?
        flag = paths[v]
    except:          
                paths[v] = k
for p in to_checks:
        while True:
            try:
                print(paths[p])
                break
            except:
                rg = p.rfind("/")
                                # 提交的时候没注意这里,因为每次rfind都会把最右边的
                                # ‘/’去掉,所以会漏掉根目录这个情况
                if rg == 0:
                    try:
                        print(paths["/"])
                    except:
                        print("N")
                    finally:
                        break
                p = p[:rg]
吐槽以下测试用例。

编辑于 2022-08-29 22:12:13 回复(0)