hiho一下第248周《Tree Restoration》题目分析

5
1

《Tree Restoration》题目分析

这道题乍一看可能会觉得无从下手。其实就是模拟手算过程,考察代码能力。可以想想拿到样例手算是怎么算的。

基本思路就是自底向上递推。

5在最左边,所以5的父节点肯定是2。

6和5的距离是2,所以5和6肯定有公共父节点。于是6的父节点也是2。

7和6的距离大于2,所以7和6肯定没有公共父节点。于是7的父节点是4(3是叶子结点,所以不会是7的父节点)。

8和7距离是2,所以8的父节点也是4。

同理一层一层向上推就行了。

这题数据范围非常小,节点数只有100。所以可以不太考虑算法的时间复杂度,找到一个正确的算法就能AC。

1 answer(s)

0
node_num = int(input('the amount of nodes:')
level_num = int(input('the amount of levels:')
result = {}
all_nodes = []
solved = 0
for i in range(level_num):
    nodes = input('%dth level\'s nodes:'%i).strip().split(' ')
    all_nodes.append(nodes)
leaves = input('all leaves\' no.:').strip().split(' ')
all_leaves_distances = []
for i in range(len(leaves)):
    leaves_distance = input('{} and every one of {}\'s distance respectively is:'.format(leaves[i], leaves)).strip().split(' ')
    all_leaves_distances.append(leaves_distance)
for i in range(level_num-1, 0, -1):
    solved_level = 0
    last_generation_situation = 0
    for j in range(len(all_nodes[i])-1):
        if j == 0:
            if all_nodes[i-1][last_generation_situation] not in leaves:
                result[all_nodes[i][j]] = all_nodes[i-1][last_generation_situation]
            else:
                last_generation_situation += 1
                result[all_nodes[i][j]] = all_nodes[i-1][last_generation_situation]
        if all_leaves_distances[leaves.index(all_nodes[i][j])][leaves.index(all_nodes[i][j+1])] == '2':                
            result[all_nodes[i][j+1] == result[all_nodes[i][j]]
        else:
            last_generation_situation += 1
            if all_nodes[i-1][last_generation_situation] not in leaves:
                result[all_nodes[i][j+1]] = all_nodes[i-1][last_generation_situation]
            else:
                last_generation_situation += 1
                result[all_nodes[i][j+1]] = all_nodes[i-1][last_generation_situation]
    solved_level += 1

以上为初步思路。

  • 每次从左到右找这个结点要到其子孙中叶节点之间的距离,用其叶节点与下一个同样的叶节点之间距离减这两段小距离,结果等不等于2,判断这两个相邻的结点和上一层节点关系。这样处置直到第1层。

  • 添加评论
  • reply

write answer 切换为英文 切换为中文


转发分享