二分查找答案

本题采用二分查找答案思路类似 链接 跳石头

由于本题的答案符合有序性,即x的时间内衣服可以被晾干,那么大于这个x的所有时间都是合法的,而我们要找的就是最小的合法的时间,符合二分的查找性质

因此我们采用二分的方式来检索答案,并且实现一个check()函数来判断当且枚举的答案是否符合要求。

二分的模板如下alt

不同的是我们要将 if 判断中的 a[mid] >= x替换成check(mid)

而对于check()函数的实现我们需要考虑的是

对于第i件衣服,如果它自始至终没有被放上烘***,那么它晾干所需要的时间就为a[i]

而若是它被放上了烘***,那么他所要的时间就是(a[i] - x) / k(使用烘***)+ 自然晾干 的时间

而如果一个时间x是合法的,那么他必须要满足大于所有没有放上烘***的衣服的湿度, 并且大于所有使用烘***的时间之和。

因此我们的check()函数只需要统计所有湿度大于x的衣服使用烘***的时间的和,再与x比较大小即可

特别地,我们需要注意小数的问题,因为c ++ 默认除法向下取整,因此我们需要调用ceil()函数来保证每件衣服被完全烘干。

以上为本人个人理解,由于没有题解因此补上一份,链接具体代码可参照