本文為大家分享了網易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
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
