• L2-020 功夫传人(Python3)


    一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。

    这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除了祖师爷没有师傅);每位师傅可以带很多徒弟;并且假设辈分严格有序,即祖师爷这门武功的每个第i代传人只能在第i-1代传人中拜1个师傅。我们假设已知祖师爷的功力值为Z,每向下传承一代,就会减弱r%,除非某一代弟子得道。现给出师门谱系关系,要求你算出所有得道者的功力总值。

    输入格式:

    输入在第一行给出3个正整数,分别是:N(≤105)——整个师门的总人数(于是每个人从0到N−1编号,祖师爷的编号为0);Z——祖师爷的功力值(不一定是整数,但起码是正数);r ——每传一代功夫所打的折扣百分比值(不超过100的正数)。接下来有N行,第i行(i=0,⋯,N−1)描述编号为i的人所传的徒弟,格式为:

    Ki​ ID[1] ID[2] ⋯ ID[Ki​]

    其中Ki​是徒弟的个数,后面跟的是各位徒弟的编号,数字间以空格间隔。Ki​为零表示这是一位得道者,这时后面跟的一个数字表示其武功被放大的倍数。

    输出格式:

    在一行中输出所有得道者的功力总值,只保留其整数部分。题目保证输入和正确的输出都不超过1010。

    输入样例:

    1. 10 18.0 1.00
    2. 3 2 3 5
    3. 1 9
    4. 1 4
    5. 1 7
    6. 0 7
    7. 2 6 1
    8. 1 8
    9. 0 9
    10. 0 4
    11. 0 3

    输出样例:

    404

    提交结果:

    代码(测试点3,测试点6非零返回):

    1. import sys
    2. def dfs(index, power):
    3. global sum1
    4. if vis[index]:
    5. sum1 += power * v[index][0]
    6. return
    7. for i in range(len(v[index])):
    8. dfs(v[index][i], power * (1 - float(r) / 100))
    9. n, z, r = sys.stdin.readline().split()
    10. v = [[] for _ in range(int(n))]
    11. vis = [0 for _ in range(int(n))]
    12. sum1 = 0
    13. for i in range(int(n)):
    14. data = list(map(int, sys.stdin.readline().split()))
    15. if data[0] == 0:
    16. vis[i] = 1
    17. v[i].append(data[1])
    18. for j in range(data[0]):
    19. v[i].append(data[j + 1])
    20. dfs(0, float(z))
    21. print(int(sum1))
  • 相关阅读:
    中英文说明书:艾美捷肝细胞培养基试剂盒
    HTTP 及三次握手,四次挥手
    【每日一题】路径总和 III
    大语言模型智能体简介
    构造函数和原型
    Linux CentOS 8(DNS的配置与管理)
    Codeforces Round #818 (Div. 2)
    改进YOLOv5 | GSConv+Slim-neck 减轻模型的复杂度同时提升精度 | 附4套改进方式模板
    <数据结构> - 数据结构在算法比赛中的应用(上)
    北斗导航 | 基于GPS/BDS多星座加权因子图优化的行人智能手机导航
  • 原文地址:https://blog.csdn.net/weixin_55730361/article/details/126516879