接水时间2

该文章介绍了一个关于计算n名同学在m个饮水机接水的总时间的编程题目,展示了如何通过C++代码求解,关注点在于时间管理和资源调度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经过升级之后,现在一共有 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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值