团体程序设计天梯赛-练习集 L2-026 小字辈 Python

团体程序设计天梯赛-练习集 L2-026 小字辈 Python_第1张图片

这道题在L2题目中属于比较简单的题了,根据题意,让我们从第二行输入中找到辈分最小的那些人并且排序输出

首先,根据第二行输入我们找到对应关系:

例如,样例中: [2,6,5,5,-1,5,6,4,7] 对应 [1,2,3,4,5,6,7,8,9],也就是键-值对应关系

[2,6,5,5,-1,5,6,4,7]中5的位置对应着[1,2,3,4,5,6,7,8,9]中的3、4、6这三个位置,以此类推

键对应父母,而值对应后代

转换成字典格式就是{ 2:1 , 6:[2,7] , 5:[3,4,6] , -1:5 , 4:8 , 7:9}

然后,按照这样的对应关系,由于辈分最高为-1,所以我们从键-1对应的值来开始查找,键为-1对应值为5,那么下一次就查找键为5的对应的值,键为5对应的值有3、4、6,下一次我们再根据[3,4,6]这三个键来查找对应的值,以此类推,直到在字典中找不到指定的键了,才停止这条查找链路

例如(-1)->(5)->(6)->(2)->(1)就是一条最长查找链路

然后最长的查找链路最后一个值即对应着最小辈分,这个链路可能不止一个,样例中就是两条

这个过程我们记录一下循环几次,然后再记录下辈分最低的成员编号,搞定!

代码如下:

import sys #导入模块,用于输入过程
in_1 = int(sys.stdin.readline()) #标准输入读入一行
list_1 = [x for x in range(1,in_1+1)] #列表生成式
list_2 = list(map(int,sys.stdin.readline().split())) #标准输入读入一行
dict_1 = {}
for x in range(0,len(list_2)):  #生成对应字典             
    if list_2[x] in dict_1:
        dict_1[list_2[x]].append(list_1[x])
    else :
        dict_1[list_2[x]] = [list_1[x]]
branch = [-1]
branch_0 = []
out_sum = 0
while True:                     #查找过程
    for x in branch:
        if x in dict_1:
            branch_0 = dict_1[x] + branch_0
    if branch_0 == []:
        break
    out_sum = out_sum + 1
    branch = branch_0[:]
    branch_0 = []
branch.sort()
print(out_sum)
print(*branch)

提交结果:

团体程序设计天梯赛-练习集 L2-026 小字辈 Python_第2张图片

你可能感兴趣的:(天梯赛Python,python,开发语言)