二分查找答案
本题采用二分查找答案思路类似 链接 跳石头
由于本题的答案符合有序性,即x
的时间内衣服可以被晾干,那么大于这个x
的所有时间都是合法的,而我们要找的就是最小的合法的时间,符合二分的查找性质
因此我们采用二分的方式来检索答案,并且实现一个check()函数来判断当且枚举的答案是否符合要求。
不同的是我们要将 if
判断中的 a[mid] >= x
替换成check(mid)
而对于check()
函数的实现我们需要考虑的是
对于第i件衣服,如果它自始至终没有被放上烘***,那么它晾干所需要的时间就为a[i]
而若是它被放上了烘***,那么他所要的时间就是(a[i] - x) / k
(使用烘***)+ 自然晾干 的时间
而如果一个时间x
是合法的,那么他必须要满足大于所有没有放上烘***的衣服的湿度, 并且大于所有使用烘***的时间之和。
因此我们的check()
函数只需要统计所有湿度大于x
的衣服使用烘***的时间的和,再与x
比较大小即可
特别地,我们需要注意小数的问题,因为c ++ 默认除法向下取整,因此我们需要调用ceil()
函数来保证每件衣服被完全烘干。
以上为本人个人理解,由于没有题解因此补上一份,链接具体代码可参照