晾衣服C语言

文章描述了一个关于衣物烘干的编程挑战,其中涉及到二分搜索算法的应用。用户需计算在给定条件(每件衣服的吸水量和散热器的烘干速率)下,最少需要多少分钟才能烘干所有衣服。关键在于实现检查时间是否足够的函数,并通过二分搜索缩小时间范围,找到最小烘干时间。
摘要由CSDN通过智能技术生成

题目:

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

在冬天洗衣服特别是烘干衣服非常困难。但小红是一个非常聪明的女孩。她不怕这个无聊的过程,决定使用散热器来加快干燥速度。但是散热器很小,所以一次只能容纳一件衣服。
小红刚洗完n件衣服。第iii件衣服在清洗过程中吸入了ai​单位的水。每分钟,每件衣服中含有的水就会减少1单位(只有当衣服还没有完全干燥时)。当所含的水量变为0时,衣服就算干燥了。
每分钟,小红都可以选择一件衣服在散热器上烘干。散热器非常热,所以在散热器上的衣服的水量每分钟会减小k单位(但不会小于0,如果这件衣服含有少于k单位的水,则水量将边为0)。
当所有衣服都干燥时,烘干过程结束。小红希望在尽可能短的时间内进行烘干。她要求你编写一个程序,用于计算给定衣服的最短烘干时间。

输入描述:

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

第一行输入一个整数n,(1≤n≤10^5)。
第二行输入n个整数a1,a2,...,an​(1≤ai≤10^9)
第三行输入一个整数k,(1≤k≤10^9)

输出描述:

输出一个整数,表示烘干所有衣服所需要的最小分钟数。

示例1

输入

3
3 2 9
5

输出

3

示例2

输入

3
3 2 6
5

输出

2

思路:(懂二分直接看check函数即可)

《二分区间中的时间--->验证时间是否足够晾干衣服--->缩短区间--->找到答案》

1.先找到一个时间区间([l,r])。(这个区间以答案为分界线,小于答案的都晾不干衣服,大于等于答案的可以晾干衣服。但大于答案的时间不是题目要的时间,我们要找到最小的可以晾干衣服的时间)

2循环判断区间中点(接下来用mid代替)是否可以晾干衣服 --->2.1可以晾干,r = mid;

                                                                                                --->2.2不可以晾干,l = mid + 1;

3.最后区间所留的值为答案。

注:下面的check函数是判断枚举的时间是否可以晾干衣服。(二分的关键)

代码:

#include <stdio.h>

int arr[100010];

int check(int mid,int n,int k)
{ 
    int sum = 0;
    for(int i = 0;i<n;i++)
    {
        if(arr[i]>mid)//这件衣服所需时间t:k*t+(mid-t)>=arr[i]
        {
            sum+=(arr[i]-mid)/(k-1);
            if((arr[i]-mid)%(k-1)) sum++;//上取整
            if(sum>mid) return 0;
        }
    }
    
    return 1;
}


int main()
{
    int n = 0,k = 0,r = 0;
    scanf("%d",&n);
    for(int i = 0;i<n;i++)
    {
        scanf("%d",&arr[i]);
        if(arr[i] > r) r = arr[i];
    }
    scanf("%d",&k);
    
    if(k==1) goto sc;
    int l = 0;
    while(l<r)
    {
        int mid = (l+r) >> 1;
        if(check(mid,n,k)) r = mid;
        else l = mid+1;
    }
    sc:
    printf("%d",r);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值