接水问题(信息学奥赛一本通-T1233)
生活随笔
收集整理的這篇文章主要介紹了
接水问题(信息学奥赛一本通-T1233)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目描述】
學校里有一個水房,水房里一共裝有m個龍頭可供同學們打開水,每個龍頭每秒鐘的供水量相等,均為1。
現在有n名同學準備接水,他們的初始接水順序已經確定。將這些同學按接水順序從1到n編號,i號同學的接水量為wi。接水開始時,1到m號同學各占一個水龍頭,并同時打開水龍頭接水。當其中某名同學j完成其接水量要求wj后,下一名排隊等候接水的同學k馬上接替j同學的位置開始接水。這個換人的過程是瞬間完成的,且沒有任何水的浪費。即j同學第x秒結束時完成接水,則k同學第x+1 秒立刻開始接水。 若當前接水人數n’不足m,則只有n’個龍頭供水,其它m-n’個龍頭關閉。
現在給出n名同學的接水量,按照上述接水規(guī)則,問所有同學都接完水需要多少秒。
【輸入】
第1行2個整數n和m,用一個空格隔開,分別表示接水人數和龍頭個數。
第2 行n個整數 w1、w2、……、wn,每兩個整數之間用一個空格隔開,wi表示 i 號同學的接水量。
【輸出】
輸出只有一行,1個整數,表示接水所需的總時間。
【輸入樣例】
5 3
4 4 1 2 1
【輸出樣例】
4
【源程序】
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #define INF 999999999 #define N 10001 using namespace std; int a[N],s[101]; int main() {int n,m;int k;cin>>n>>m;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++){int min=INF;for(int j=1;j<=m;j++)if(s[j]<min){min=s[j];k=j;}s[k]+=a[i];}int max=-INF;for(int i=1;i<=m;i++)if(s[i]>max)max=s[i];cout<<max<<endl;return 0; }總結
以上是生活随笔為你收集整理的接水问题(信息学奥赛一本通-T1233)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小兔的棋盘(HDU-2067)
- 下一篇: 金银岛(信息学奥赛一本通-T1225)