打水问题

酒馆中有m个龙头,可供顾客们接啤酒,每个龙头每秒的出酒量相等,都是1,现有n名顾客准备接酒,他们出示的接酒顺序已经确定。将这些顾客按接酒顺序从1到n编号,i号顾客的接酒量为w_i。接酒开始时,1到m号顾客各占一个酒龙头,并同时打开龙头接酒,当其中某个顾客完成其接酒量要求wj后,下一名排队等候接酒的顾客k马上阶梯顾客的位置开始接酒,这个换人的过程是瞬间完成的,且没有任何酒的浪费,即,顾客第x秒结束时完成接酒,则k顾客第x+1秒立刻开始接酒,若当前接酒人数 n‘ 不足m,则只有n’个龙头供酒,其它m-n‘个龙头关闭,现在给出n名顾客的接酒量,按照上述规则,问所有顾客都接完酒需要的时间是多少秒?

输入描述:

输入包括两行,第一行为以空格分割的两个数n和m,分别表示接酒的人数和酒龙头个数,均为正整数。

第二行n个整数w_i(1<= w_i <=100)表示每个顾客的接酒量。

输出描述:

如果输入合法,输出酒所需总时间(秒)


示例

输入:

5 3

4 4 1 2 1

输出:

4


#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main (void)
{
    int T=0,i=0,j=0;
    int n=0,m=0;
    int m_person[105];
    int m_bear[10];
    int m_time=0;
    int max=0;

    scanf("%d %d",&n,&m);

    m_time=0;


    for(i=0; i<n; i++){
        scanf("%d", &m_person[i]);
        if(max < m_person[i]){
            max = m_person[i];
        }
    }

    if(m>=n){
        m_time = max;
    }
    else{
        for(i=0;i<m;i++){
            m_bear[i] = m_person[i];
        }

        j = m-1;

        while(j < n){   //xiu  gai   chu
            for(i=0; i<m; i++){
                m_bear[i]--;
                if(!m_bear[i]){
                    j++;
                    if(j < n){
                        m_bear[i] = m_person[j];
                    }

                }
            }

            m_time++;
        }

    }

    printf("%d\n",m_time);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值