• 校招真题练习001 牛牛找工作(网易)


    牛牛找工作

    题目描述

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

    输入描述:
    每个输入包含一个测试用例。
    每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。
    接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
    接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。
    保证不存在两项工作的报酬相同。

    输出描述:
    对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。

     1 import sys
     2 import bisect
     3 lines=sys.stdin.readlines()
     4 n,m=map(int,lines[0].strip().split())
     5 task={}
     6 for line in lines[1:-1]:
     7     if not line.strip().split():
     8         continue
     9     a,b=map(int,line.strip().split())
    10     task[a]=max(task.get(a,0),b)
    11 arr=sorted(task.keys())
    12 for i in range(1,len(task)):
    13     if task[arr[i]]<task[arr[i-1]]:
    14         task[arr[i]]=task[arr[i-1]]
    15 skills=map(int,lines[-1].strip().split())
    16 for skill in skills:
    17     if skill in task:
    18         print(task[skill])
    19     else:
    20         ind=bisect.bisect(arr,skill)
    21         if ind==0:
    22             print(0)
    23         else:
    24             print(task[arr[ind-1]])

    数据结构:数组

    算法思路:贪心+二分查找

     
  • 相关阅读:
    Qt MFC 混合编程的问题
    DECLARE_MESSAGE_MAP用法
    DECLARE_DYNCREATE与DECLARE_DYNAMIC区别
    Qt unsigned char* (uchar*) 转为QImage
    C++ SafeArrayAccessData,SafeArrayUnaccessData使用
    C++ 实现 COM → IUnknown → 接口
    C++ COM编程之IUnknown接口
    C++ COM三大接口:IUnknown、IClassFactory、IDispatch。
    C++ COM组件QueryInterface函数
    C++ COM组件的AddRef和Release()方法使用
  • 原文地址:https://www.cnblogs.com/asenyang/p/11095064.html
Copyright © 2020-2023  润新知