牛客網 牛牛找工作 python解法

2021-10-04 10:13:22 字數 1416 閱讀 6485

題目描述:

為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標準來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好把這個任務交給了你。

輸入:

每個輸入包含乙個測試用例。

每個測試用例的第一行包含兩個正整數,分別表示工作的數量n(n<=100000)和小夥伴的數量m(m<=100000)。

接下來的n行每行包含兩個正整數,分別表示該項工作的難度di(di<=1000000000)和報酬pi(pi<=1000000000)。

接下來的一行包含m個正整數,分別表示m個小夥伴的能力值ai(ai<=1000000000)。

保證不存在兩項工作的報酬相同。

輸出:

對於每個小夥伴,在單獨的一行輸出乙個正整數表示他能得到的最高報酬。乙個工作可以被多個人選擇。
這題如果用兩個內嵌for迴圈就會超時間。 按報酬排序也超時間。

題解:用字典儲存難度、報酬,同時把能力也當做鍵加入。按照能力從小到大排序,這樣只需要和前面能力值小的所獲最大報酬比較。(能力值大的報酬只會大於或者等於能力低的)

import sys

def main():

lines = sys.stdin.readlines()

lines = [l.strip().split() for l in lines if l.strip()]

n, m = int(lines[0][0]), int(lines[0][1])

res = [0]*(m+n)

abilities = list(map(int, lines[-1]))

maps = dict()

for index,l in enumerate(lines[1:-1]):

d,p = int(l[0]), int(l[1])

maps[d] = p

res[index] = d

for index,a in enumerate(abilities):

if a not in maps:

maps[a] = 0

res[index+n] = a

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]])

if __name__ == '__main__':

main()

感觸:這題挺難的。。。

牛客網 牛牛找工作

時間限制 2秒 空間限制 65536k 為了找到自己滿意的工作,牛牛收集了每種工作的難度和報酬。牛牛選工作的標準是在難度不超過自身能力值的情況下,牛牛選擇報酬最高的工作。在牛牛選定了自己的工作後,牛牛的小夥伴們來找牛牛幫忙選工作,牛牛依然使用自己的標 准來幫助小夥伴們。牛牛的小夥伴太多了,於是他只好...

牛客網 牛牛的數列

題目描述 牛牛現在有乙個n個數組成的數列,牛牛現在想取乙個連續的子串行,並且這個子串行還必須得滿足 最多隻改變乙個數,就可以使得這個連續的子串行是乙個嚴格上公升的子串行,牛牛想知道這個連續子串行最長的長度是多少。一開始看到這個題,總是被繞進 改變乙個數 中,就想說是不是遍歷陣列,然後每個數都嘗試改變...

牛客網 牛牛打怪獸

題目描述 題意身為屯里第一劍士的牛牛來到訓練場裡闖關,由於過於勤奮,牛牛的寶劍的耐久度降到了 22 這意味著牛牛最多只能打倒兩隻怪獸,否則將會被淘汰。訓練場的地圖可以看作一棵以 11 為根節點的樹,訓練場的終點為這棵樹的葉子結點,樹上的每個結點最多有乙隻怪獸,結點與結點間的邊上沒有怪獸。每乙個有怪獸...