题解:
这题最开始是朝着二分的方向去想的,对温度进行二分求解答案,但想了好久,感觉二分的check函数不好写,而且感觉精度也可能会有比较大的丢失。
正解是贪心思想,先将n杯水的最大温度maxT和最小温度minT先存起来,将水缸和n杯水杯里的水全部混在一起,会得到一个混合后的温度endT,将这个温度和之前得到最大温度以及最小温度进行比较,这里分三种情况:
①混合后后温度低于最小温度,即minT>=endT,这种情况一定可以保证水缸水够用并且能让所有的水杯里的水都下降温度,那么要得到最大的相同温度,只需将全部里的水杯都混合成最小的温度minT即可。②混合后后温度高于最大温度,即maxT<=endT,这种情况一定可以保证水缸水够用并且能让所有的水杯里的水都上升温度,那么要得到最大的相同温度,这时的endT就是最大的相同温度了。③混合后的温度介于最大温度和最小温度之间,即minT<endT<maxT,这时是不存在成立的情况的,我开始也没想明白,后面细想了一下,我们来分析一下,如果minT要达到endT,那么混入这杯水里进去的水的水温肯定要大于endT的,这样混合后才有可能达到endT,同理,若要maxT达到endT,那么混入这杯水里进去的水的水温肯定要小于endT的,这就矛盾了,因此这种情况就一定不存在了。
下面附上AC代码:
#include<bits/stdc++.h>
using namespace std;
pair<double,double> tc