经过升级之后,现在一共有 m 个饮水机可供同学们接水,每个饮水机每秒钟的供水量相等,均为1。
现在有n名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从1到n编号,i号同学的接水量为wi。接水开始时,1到m号同学各占一个饮水机,并同时打开饮水机开始接水。当其中某名同学j完成其接水量要求wj后,下一名排队等候接水的同学k马上接替j同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j同学第x秒结束时完成接水,则k同学第x+1秒立刻开始接水。若当前接水人数n’不足m,则只有n’个龙头供水,其它m-n’个龙头关闭。
现在给出n名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。
输入
共2行。
第1行2个整数n和m,用一个空格隔开,分别表示接水人数和龙头个数。
第2行n个整数w1、w2、……、wn,每两个整数之间用一个空格隔开,wi表示i号同学的接水量。
输出
共1行,1个整数,表示接水所需的总时间。
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[20005]={0};
int b[20005]={0};
int n,m;
int num=0;
int t=0;
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
if(i<=m){
b[i]=a[i];
}
}
int cnt=m+1;
while(1){
if(num==n){
break;
}
t++;
for(int i=1;i<=m;i++){
b[i]--;
if(b[i]==0){
b[i]=a[cnt];
cnt++;
num++;
}
}
}
cout<<t;
return 0;
}