牛客網—2016—網易獎學金

沒錯,我戀愛了,嘖嘖,話說啊,挺突然的,突然到我覺得一切都不真實,可是他有那麼真是的存在著,哈哈,沒辦法,po圖一張。。。開心。。。希望短時間內不要打臉,我還想多喜歡一陣子。。。

這裡寫圖片描述
題目:
小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

5 10 9
0 5
9 1
8 1
0 1
9 100

輸出:

43

解析:
1 . 敲黑板了,要多拿一分,需要花多長時間。
解題所需函式:
1 . 沒啥毛病,就最主要的是氣泡排序了。。。
程式碼:

import java.util.*;
// 建立主函式
public class Main {
public static void main(String[] args) {
// 準備錄入資料
Scanner in = new Scanner(System.in);
// 這個也沒毛病,嘖嘖,while迴圈錄入
while (in.hasNext()) {
// 定義需要的 n r 和 avg
int n = in.nextInt();
long r = in.nextLong();
long avg = in.nextLong();
// 記錄學習效率
long[][] arr = new long[n][2];
//需要的分數
long total = avg*n;
//現在的分數
long score = 0;
for(int i = 0;i<n;i  ){
// 原本成績
arr[i][0] = in.nextLong();
// 複習成本
arr[i][1] = in.nextLong();
score  = arr[i][0];
}
// 對學習效率進行排序
sort(arr);
long time = 0;
int i = 0;
while(score<total&&i<n){
//第i門課沒有滿分
if(arr[i][0]<r){
time  = arr[i][1];
score  ;
arr[i][0]  = 1;
}else{
// 否則下一個課程,靴靴
i  ;
}
}
System.out.println(time);   
}
in.close();
}
//對時間進行排序
public static void sort(long[][]a){
for(int i = 0;i<a.length-1;i  ){
boolean flag = true;
//每一次迴圈都確立了最後的一個值,這樣說對吧,氣泡排序
for(int j = 0;j<a.length-1-i;j  ){
// 成本由小到大排列
if(a[j][1]>a[j 1][1]){
// 需要交換兩個值,所以用了temp和temp2
long temp = a[j][0];
long temp2 = a[j][1];
a[j][0] = a[j 1][0];
a[j 1][0] = temp;
a[j][1] = a[j 1][1];
a[j 1][1] = temp2;
flag = false;
}
}
if(flag)
return;
}
}
}