牛牛找工作

题目

为了找到自己满意的工作,牛牛收集了每种工作的难度和报酬。
牛牛选工作的标准是在难度不超过自身能力值的情况下,
牛牛选择报酬最高的工作。
在牛牛选定了自己的工作后,牛牛的小伙伴们来找牛牛帮忙选工作,
牛牛依然使用自己的标准来帮助小伙伴们。
牛牛的小伙伴太多了,于是他只好把这个任务交给了你。

例题

每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)	和小伙伴的数量M(M<=100000)。
接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。
保证不存在两项工作的报酬相同。
输入:
3 3 
1 100 
10 1000 
1000000000 1001 
9 10 1000000000
对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。
一个工作可以被多个人选择。
输出:
100
1000
1001

代码

思路:
1、把所有的工作难度以及对应的费用用字典表示,以及小伙伴当下工作难度对应费用为0
2、所有的工作难度以及小伙伴自身的难度放在一个数组中
3、对res中的难度排序,顺序遍历res,付给当前难度对应的最高费用
4、打印
if __name__ == "__main__":
    nums = list(map(int,input().split()))
    jobs = []
    for _ in range(nums[0]):
        line = list(map(int,input().split()))
        jobs.append(line)
    abilities = list(map(int,input().split()))

    n,m = int(nums[0]),int(nums[1])
    res = [0]*(n+m)
    maps = dict()

    for idx,val in enumerate(jobs):
        #难度:Di   费用Pi
        Di = val[0]
        pi = val[1]
        maps[Di] = pi
        res[idx] = Di
    for idx,val in enumerate(abilities):
        if val not in maps:
            maps[val] = 0
        res[idx+n] = val
    #print(res)
    #print(maps)
    res.sort()
    maxSalary = 0
    for i in range(n+m):
        maxSalary = max(maxSalary,maps[res[i]])
        maps[res[i]] = maxSalary
    for i in range(m):
        print(maps[abilities[i]])



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值