如需轉載請留言。html
題目以下:java
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int maxQps= Integer.valueOf(in.nextLine()); final String[] rtList = in.nextLine().split(","); final int requestNum = Integer.valueOf(in.nextLine()); final int threadNum = Integer.valueOf(in.nextLine()); System.out.println(doneTime(maxQps, rtList, requestNum, threadNum)); } /** * 若是使用最優的最大吞吐量負載均衡算法,按照最優模型多久可以處理完全部請求,單位毫秒。 * @return */ static long doneTime(int maxQps,String[] rtList,int requestNum,int threadNum) { //TODO return 0; } }
編譯器版本: Java 1.8.0_66 請使用標準輸入輸出(System.in, System.out);已禁用圖形、文件、網絡、系統相關的操做,如java.lang.Process , javax.swing.JFrame , Runtime.getRuntime;不要自定義包名稱,不然會報錯,即不要添加package answer之類的語句;您能夠寫不少個類,可是必須有一個類名爲Main,而且爲public屬性,而且Main爲惟一的public class,Main類的裏面必須包含一個名字爲'main'的靜態方法(函數),這個方法是程序的入口
時間限制: 30S (C/C++之外的語言爲: 32 S) 內存限制: 200M (C/C++之外的語言爲: 712 M)
輸入:輸入數據包含5行數字: 第一行是每臺broker的極限QPS 第二行是broker rt列表,用逗號分割,幾個rt表示幾個broker 第三行是消息生產請求總數 第四行是最大併發線程數
輸出:按照最大吞吐量執行完全部請求,須要耗時多少毫秒
輸入範例:200 1,1,1,10,10 5000 10
輸出範例:5000linux
首先,咱們要弄明白幾個概念。第一個,什麼叫最大吞吐量負載均衡算法。git
詳見:負載均衡幾種常見算法的簡單介紹web
並且,如題所需,咱們創建在「最優模型」下求解。因此,咱們忽略帶寬,節點信息等的限制,進入理想狀況。算法
接下來,咱們須要解決的問題,就是在理想狀況下,qps(query per second)和threadNum(線程數量),rt(響應時間)之間的關係。bash
詳見:qps,rt,threadNum的關係服務器
上面的資料連接裏,那張吞吐量與qps,threadNum的關係,以及qps=threadNum/rt,對本題都很關鍵。網絡
那麼答案已經顯而易見了。咱們也能理清題目中全部已知條件對最終結果的影響。那碼代碼就是分分鐘的事。併發
import java.util.Scanner; /** * @author Feng_zhulin * @since 17/3/20 */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int maxQps= Integer.valueOf(in.nextLine()); final String[] rtList = in.nextLine().split(","); final int requestNum = Integer.valueOf(in.nextLine()); final int threadNum = Integer.valueOf(in.nextLine()); System.out.println(doneTime(maxQps, rtList, requestNum, threadNum)); } /** * 若是使用最優的最大吞吐量負載均衡算法,按照最優模型多久可以處理完全部請求,單位毫秒。 * @return */ static long doneTime(int maxQps,String[] rtList,int requestNum,int threadNum) { //TODO int qpsSum = 0; for (String rtString : rtList) { int singleMaxQps = threadNum * 1000 / Integer.valueOf(rtString); if (singleMaxQps > maxQps) { qpsSum += maxQps; }else { qpsSum += singleMaxQps; } } return requestNum / qpsSum * 1000; } }
簡單的寫法,隨手碼的,求不噴。
最後驗證一下:
Feng_zhulindeMacBook-Pro:Desktop Feng_zhulin$ java Main 200 12,11,13,20,50 40000 8 41000
Feng_zhulindeMacBook-Pro:Desktop Feng_zhulin$ java Main 200 1,1,1,10,10 5000 10 5000