題目描述:
學校里有一個水房,水房里一共裝有m個龍頭可供同學們打開水,每個龍頭每秒鐘的供水量相等,均為1。現在有n名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從1到n編號,i號同學的接水量為wi。接水開始時,1到m號同學各占一個水龍頭,并同時打開水龍頭接水。當其中某名同學j完成其接水量要求wj后,下一名排隊等候接水的同學k馬上接替j同學的位置開始接水。這個換人的過程是瞬間完成的,且沒有任何水的浪費。即j同學第x秒結束時完成接水,則k同學第x+1秒立刻開始接水。若當前接水人數n’不足m,則只有n’個龍頭供水,其它m?n’個龍頭關閉。現在給出n名同學的接水量,按照上述接水規則,問所有同學都接完水需要多少秒。
樣例? 1? 說明
第1秒,3人接水。第1秒結束時,1、2、3號同學每人的已接水量為1,3號同學接完水,4號同學接替3號同學開始接水。
第2秒,3人接水。第2秒結束時,1、2號同學每人的已接水量為2,4號同學的已接水量為1。
第3秒,3人接水。第3秒結束時,1、2號同學每人的已接水量為3,4號同學的已接水量為2。4號同學接完水,5號同學接替4號同學開始接水。
第4秒,3人接水。第4秒結束時,1、2號同學每人的已接水量為4,5號同學的已接水量為1。1、2、5號同學接完水,即所有人完成接水。
總接水時間為4秒。
代碼:
package lanqiao;import java.math.BigInteger;
import java.text.DecimalFormat;
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(); //接水人數int m = sc.nextInt(); //水龍頭人數int[] arr1 = new int[n];int[] arr2 = new int[m];for(int i = 0;i < n;i ++){arr1[i] = sc.nextInt();}if(n <= m){int max = 0;for(int i = 0;i < n; i++){max = max < arr1[i] ? arr1[i]:max;}System.out.println(max);}else{for(int i = 0;i < m;i ++){arr2[i] = arr1[i];}int index = m;for(int i = m;i < n;i ++){int min = arr2[0];for(int j = 0;j < m;j ++){min = min > arr2[j]?arr2[j]:min;}for(int j = 0;j < m;j ++){if(arr2[j] == min){arr2[j] += arr1[index];index ++;}if(index == n){break;}}}int max = 0;for(int i = 0;i < m;i++){max = max < arr2[i]?arr2[i]:max;}System.out.println(max);}}
}