
题解:这题最开始是朝着二分的方向去想的对温度进行二分求解答案但想了好久感觉二分的check函数不好写而且感觉精度也可能会有比较大的丢失。正解是贪心思想先将n杯水的最大温度maxT和最小温度minT先存起来将水缸和n杯水杯里的水全部混在一起会得到一个混合后的温度endT将这个温度和之前得到最大温度以及最小温度进行比较这里分三种情况:①混合后后温度低于最小温度即minTendT这种情况一定可以保证水缸水够用并且能让所有的水杯里的水都下降温度那么要得到最大的相同温度只需将全部里的水杯都混合成最小的温度minT即可。②混合后后温度高于最大温度即maxTendT这种情况一定可以保证水缸水够用并且能让所有的水杯里的水都上升温度那么要得到最大的相同温度这时的endT就是最大的相同温度了。③混合后的温度介于最大温度和最小温度之间即minTendTmaxT这时是不存在成立的情况的我开始也没想明白后面细想了一下我们来分析一下如果minT要达到endT那么混入这杯水里进去的水的水温肯定要大于endT的这样混合后才有可能达到endT同理若要maxT达到endT那么混入这杯水里进去的水的水温肯定要小于endT的这就矛盾了因此这种情况就一定不存在了。下面附上AC代码#includebits/stdc.husingnamespacestd;pairdouble,doubletc[100005];intmain(){intn;scanf(%d,n);doubleT,C;scanf(%lf%lf,T,C);doubleMint1e45,Maxt-1;doublenowtT*C,nowcC;for(inti1;in;i){scanf(%lf%lf,tc[i].first,tc[i].second);Mintmin(Mint,tc[i].first);Maxtmax(Maxt,tc[i].first);nowttc[i].first*tc[i].second;nowctc[i].second;}nowt/nowc;if(Mintnowt){printf(Possible\n%.4lf,Mint);}elseif(Maxtnowt){printf(Possible\n%.4lf,nowt);}else{printf(Impossible\n);}return0;}