牛客 题目ID13228 倒水 题解 贪心思想

博客讲述了如何使用贪心思想解决牛客网题目ID13228的问题。通过分析水的温度,将情况分为三种:低于最小温度、高于最大温度和介于两者之间。在前两种情况下,可以找到最大相同温度,而第三种情况不存在解。最后提供了实现算法的AC代码。
摘要由CSDN通过智能技术生成

在这里插入图片描述
题解:
       这题最开始是朝着二分的方向去想的,对温度进行二分求解答案,但想了好久,感觉二分的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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值