1233 接水問題

2021-10-05 05:46:34 字數 1083 閱讀 6457

【題目描述】

學校裡有乙個水房,水房裡一共裝有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行2個整數n和m,用乙個空格隔開,分別表示接水人數和龍頭個數。

第2 行n個整數 w1、w2、……、wn,每兩個整數之間用乙個空格隔開,wi表示 i 號同學的接水量。

【輸出】

輸出只有一行,1個整數,表示接水所需的總時間。

【輸入樣例】

5 34 4 1 2 1

【輸出樣例】

4【提示】

樣例輸入#2:

8 423 71 87 32 70 93 80 76

樣例輸出#2:

163思路:這是一條貪心題,也是一題接水問題。這題有兩種可能,1.如果m>=n,那麼就輸出最長接水時間就好了。2.如果m好了,話不多說,看下面。

#include

using

namespace std;

int time[

10009];

int n,m,maxx=0;

intmain()

}if(m>=n)

int l=

1,r=m,tot=0;

for(

int j=l;j<=n-m+

1;j++

)for

(int i=l+

1;i<=r;i++

) tot=tot+time[l]

; l++

; r++;}

return0;

}

資訊學奧賽一本通 1233 接水問題(evd)

題目描述 學校裡有乙個水房,水房裡一共裝有m個龍頭可供同學們開啟水,每個龍頭每秒鐘的供水量相等,均為1。現在有n名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從1到n編號,i號同學的接水量為wi。接水開始時,1到m號同學各佔乙個水龍頭,並同時開啟水龍頭接水。當其中某名同學j完成其接...

接水問題 二

n個人一起排隊接水,第i個人的重要性是a i 需要b i 的時間來接水。1 n 100000 0 b i 1000 0 a i 1000 同時只能有乙個人接水,正在接水的人和沒有接水的人都需要等待。完成接水的人會立刻消失,不會繼續等待。你可以決定所有人接水的順序,並希望最小化所有人等待時間乘以自己的...

接水問題 題解

學校裡有乙個水房,水房裡一共裝有 m mm 個龍頭可供同學們開啟水,每個龍頭每秒鐘的供水量相等,均為 111。現在有 n nn 名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從 1 11 到 n nn 編號,i ii 號同學的接水量為 w iw i wi 接水開始時,1 11 到 ...