C++ 编程实现:调节水龙头温度和流量
使用 C++ 编程实现:调节水龙头温度和流量
小码哥家里的浴缸有一个冷水龙头和一个热水龙头,流出的水温分别是't' 和 't2';它们的流速最大是每秒 'x' 和 'z' 个单位,并且可以调节到 0 至最大流速间的任意一个整数速度。假如两个龙头的流速分别是 'y1' 和 'y2' (0≤y≤10),那么最终的水温就是 't = (t1 * y1 + t2 * y2) / (y1 + y2)'。
现在,小码哥请你帮忙安排两个水龙头的流速,满足:
- 最终水温不低于 'to';
- 在满足上一条的前提下,水温尽可能接近 't';
- 在满足上一条的前提下,总流速尽可能大。
输入格式:
一行五个整数 't', 't2', 'x', 'z', 'to'; 其中: 1 < t ≤ to < t2 < 106,1 ≤ x, z < 106
输出格式:
输出一行两个数表示 'y1' 和 'y2'。
思路:
使用二分答案,对于每个热水龙头的流速 'y1',可以通过公式计算出对应的水温 't1',那么冷水龙头的流速 'y2' 可以通过枚举得到,使得水温 't2' 不低于 'to',且 't1' 和 't2' 的差尽可能小,同时总流速也尽可能大。
具体实现:
设热水龙头的流速为 'y1',则冷水龙头的流速 'y2' 的范围为 [0, x-y1]。
对于每个 'y1',计算对应的 't1'。若 't1 < to',则说明 'y1' 过小,需增大 'y1';若 't1 >= to',则说明 'y1' 过大,需减小 'y1'。
对于每个满足 't1 >= to' 的 'y1',枚举 'y2',计算对应的 't2',计算 't1' 和 't2' 的差,更新答案。同时记录总流速,更新最优解。
时间复杂度:
O(nlogn),其中 'n' 为 'x' 的大小。
代码实现:
// 代码实现部分,请根据思路自行编写代码
原文地址: https://www.cveoy.top/t/topic/lPnE 著作权归作者所有。请勿转载和采集!