ycb去接水

本文介绍了一个关于饮水机排队的问题,n个同学等待使用m个接水口,每位同学有不同的接水时间。通过模拟每人的接水过程并寻找当前可用的最短接水时间的水龙头,最终确定ycb接水的时间。

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

博知楼终于安好饮水机了,ycb迫不及待要去接水,但是他到那里才发现前面已经有n个同学了。他数了数,饮水机一共有m个接水口。所有的同学严格按照先来后到去接水(m个接水口同时工作,哪个水龙头有空人们就去哪里,如果n<m,那么久只有n个接水口工作)。每个人都有一个接水的时间,当一个人接完水后,下一秒另一个人马上去接,不会浪费时间。ycb急着去做题,所以他想知道什么时候才能轮到他。

第一行两个整数 n和m,表示ycb前面有n个同学,饮水机有m个接水口。(n,m <= 1000)
第二行n个整数,表示每个同学的接水时间。

一行,一个数,表示轮到ycb接水的时间

4 2
1 1 1 1
3
当时见到这个题时,只是觉得前面的n个人所用的 时间不一样,那么当前面的节水机正在被用的时候,你就得等着,如果
有人完成了,你还得看那个接水的时间最短即最快,所以感觉好麻烦,但是通过和别人交流,知道这个题的数据比较小,
通过for循环比较直接得出最小时间的接水机。

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
using namespace std;

int main()
{
    int n,m,point;
    if(n<m)///当n<m时,只有n个接水机能用。
        m=n;
    int shi[1001],shui[1001];
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;i<n;i++)
        {
            scanf("%d",&shi[i]);//前面n个人所用的时间,因为先来先接,所以用数组盛起来,从头便利即模拟来的顺序。
        }
        for(int i=0;i<m;i++)
        {
            shui[i]=0;//所有能用的接水机的时间。初始化为0是为了后面累加显示当前的时间
        }
        int mm;
        for(int i=0;i<n;i++)
        {
            mm=99999999;//对每个人来说,都要去时间最短的去,即都需要判断最小值。
            for(int j=0;j<m;j++)
            {
                if(shui[j]<mm)
                {
                    mm=shui[j];
                    point=j;
                }
            }
            shui[point]+=shi[i];//在时间最短的接水机的数组里面加上当前这个人的时间。
        }
        mm=99999999;//重新为最大值,目的是为了下面的找最小值
        for(int i=0;i<m;i++)
        {
            if(shui[i]<mm)
            {
                mm=shui[i];//找最小值
            }
        }
        printf("%d\n",mm+1);
 }
}
听说寻找最小值能用最小堆来实现,等我再修炼一下再来改吧。


另外,这个题目用贪心法来实现,但是我都不知道什么是贪心法,学过之后再回来改吧


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值