题目
一个XX产品行销总公司,只有一个 boss,其有若干一级分销,一级分销又有若干二级分销,每个分销只有唯一的上级分销规定每个月,下级分销需要将自己的总收入(自己的+下级上交的)每满100元上交15元给自己的上级.
现给出一组分销的关系,和每个分销的收入,请找出 boss并计算出这 boss 的收入。比如:收入100元上交15元,收入199元(9元不够100)上交15元,收入200元,上交30元。分销关系和收入:分销id 上级分销的ld 收入
分销ID范围0…65535
收入范围:0…65535,单位元
提示: 输入的数据只存在1个 boss,不存在环路输入描述
第1行输入关系的总数量N
第2行开始,输入关系信息,格式:分销ID 上级分销ID 收入
输出描述
boss的ID 总收入
补充说明
给定的输入数据都是合法的,不存在重复示例1
输入
5
1 0 100
2 0 200
3 0 300
4 0 200
5 0 200
输出
0 150示例2:
输入
3
1 0 223
2 0 323
3 2 1203
输出
0 105
说明
2的最终收入等于323+1203/100*15=323+180
0的最终收入等于(323+180+ 223)/100*15=105
代码
from unittest. mock import patchclass SalaryStructure : def __init__ ( self, id , parent_id, salary) : self. id = id self. parent_id = parent_idself. salary = salaryself. employees = [ ] def __str__ ( self) : return '%s %s %s %s' % ( self. id , self. parent_id, self. salary, str ( list ( map ( lambda x: x. salary, self. employees) ) ) ) def __repr__ ( self) : return '%s %s %s %s' % ( self. id , self. parent_id, self. salary, str ( list ( map ( lambda x: x. salary, self. employees) ) ) ) class Solution : def func ( self, lst) : boss = SalaryStructure( 0 , - 1 , 0 ) p_dict = { 0 : boss} for i in lst: employee = SalaryStructure( i[ 0 ] , i[ 1 ] , i[ 2 ] ) p_dict[ i[ 1 ] ] . employees. append( employee) p_dict. update( { i[ 0 ] : employee} ) for i in sorted ( p_dict. keys( ) , reverse= True ) : p_dict[ i] . salary += sum ( ( map ( lambda x: x. salary, p_dict[ i] . employees) ) ) // 100 * 15 return p_dict
def input_args ( ) : N = input ( "关系总数量N:" ) input_lst = [ ] for i in range ( int ( N) ) : single_lst = input ( "共%s位,请输入第%s位(格式 id parent_id salary 如 1 0 100 :" % ( str ( N) , str ( i) ) ) single_lst = single_lst. split( ' ' ) input_lst. append( [ int ( single_lst[ 0 ] ) , int ( single_lst[ 1 ] ) , int ( single_lst[ 2 ] ) ] ) return N, input_lstmock_input_lst = [ 5 , '1 0 100' , '2 0 200' , '3 0 300' , '4 0 400' , '5 0 500' ,
] mock_input_lst = [ 3 , '1 0 223' , '2 0 323' , '3 2 1203' ,
]
with patch( 'builtins.input' , side_effect= mock_input_lst) : N, input_lst = input_args( )
s = Solution( )
ans = s. func( input_lst)
print ( ans)
print ( ' ' . join( map ( str , [ 0 , ans[ 0 ] . salary] ) ) )