您好,登錄后才能下訂單哦!
本文為大家分享了網易2016研發工程師編程題,供大家參考,具體內容如下
'''
[編程題] 獎學金
時間限制:1秒
空間限制:32768K
小v今年有n門課,每門都有考試,為了拿到獎學金,小v必須讓自己的平均成績至少為avg。
每門課由平時成績和考試成績組成,滿分為r。現在他知道每門課的平時成績為ai ,
若想讓這門課的考試成績多拿一分的話,小v要花bi 的時間復習,不復習的話當然就是0分。
同時我們顯然可以發現復習得再多也不會拿到超過滿分的分數。為了拿到獎學金,小v至少要花多少時間復習。
輸入描述:
第一行三個整數n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),
接下來n行,每行兩個整數ai和bi,均小于等于1e6大于等于1
輸出描述:
一行輸出答案。
輸入例子1:
5 10 9
0 5
9 1
8 1
0 1
9 100
輸出例子1:
43
'''
'''
解題思路:排序
先把平均成績ai和復習時間bi放入ab_i中,然后把ab_i按照bi從小到大的順序排序
然后1、求出所需要的總分(n*avg) 2、求出平均成績的總和;如果平均成績的總和已經大于了所需總分,則輸出0,否則:
按順序訪問ab_i,如果ab_i中當前科目的平均分已經到達滿分,則訪問下一個科目,否則的話給當前科目平均分加1,當前的總分加1,消耗時間加上該科目獲取1分的復習時間。
直至當前的總分等于目標總分后輸出所耗費的時間。
'''
'''
代碼運行結果:
答案正確:恭喜!您提交的程序通過了所有的測試用例
'''
while True: try: n, r, avg = [int(each) for each in input().split()] ab_i = [] for i in range(n): ab_i.append([int(each) for each in input().split()]) ab_i = sorted(ab_i, key=lambda x: x[1]) target = n * avg current = sum([each[0] for each in ab_i]) time_total = 0 if current < target: index = 0 while current < target: while ab_i[index][0] >= r: index += 1 time_total += ab_i[index][1] ab_i[index][0] += 1 current += 1 print(time_total) else: print(0) except: break
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。