题目链接:点击查看

题目大意:一杯热水的温度为 h ,一杯凉水的温度为 c ,现在有一个空桶,要求轮流执行以下操作:

  1. 倒一杯热水
  2. 倒一杯凉水
  3. 倒一杯热水
  4. .....

每次总是以一杯热水开始,问需要倒多少倍水,才能使得桶内的平均温度与 t 之差最小

题目分析:数学不好,推不出来答案的表达式,所以当三分来做了,首先热水和凉水的相对状态只有两种情况:

  1. 热水和凉水一样多
  2. 热水比凉水多一杯

然后再设平均值 ave = ( h + c ) / 2 ,然后需要再分两种情况:

  1. t = ave:答案为 2
  2. t < ave:需要凉水多一杯
  3. t > ave:需要热水多一杯

上面的第二种情况是不合法的,所以对于第二种情况来说,最优的情况就归纳于情况一中了,换句话说当 t <= ave 时,答案都为 2

这样我们只需要三分出热水比凉水多一杯时的最优解就好了,因为是整数的三分,可以将范围扩大点,然后再暴力找最小值

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
#include<cassert>
#include<unordered_map>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=2e5+100;int h,c,t;double cal(LL n)
{return fabs(1.0*(n*h+(n-1)*c)/(2*n-1)-t);
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false); int w;cin>>w;while(w--){scanf("%d%d%d",&h,&c,&t);if(h==t){puts("1");continue;}if(h+c>=t*2){puts("2");continue;}int l=1,r=inf;while(r-l>10){LL mid=l+r>>1;LL mmid=r+mid>>1;if(cal(mid)<cal(mmid))r=mmid;elsel=mid;}double eps=1e10;LL ans=0;for(LL i=l;i<=r;i++){if(eps>cal(i)){eps=cal(i);ans=i;}}printf("%lld\n",ans*2-1);}return 0;
}

CodeForces - 1359C Mixing Water(三分)相关推荐

  1. 1359C. Mixing Water

    C. Mixing Water 一个简单的思维. 因为是一隔一的,所以要么热水多放一个,要么冷水和热水一样多. 设热水与要求的差为cou1,冷水与要求的差为cou2. 所以我们先考虑两种情况: 1,c ...

  2. Educational Codeforces Round 88 (Rated for Div. 2)C. Mixing Water(数学+二分法)---题解

    C. Mixing Water 来源:http://codeforces.com/contest/1359/problem/C There are two infinite sources of wa ...

  3. Codeforces 1359 C. Mixing Water (二分 /数学)

    链接 C. Mixing Water 题意 : 给一个容器,往里面不断地倒 热水 冷水 交替进行,问最少倒多少杯水后容器内的平均温度最接近于 T. 思路: 首先很容易观察到,如果倒进去的水是偶数杯,那 ...

  4. Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water (思维,数学)

    题目链接 题意: 给你一杯热水和一杯冷水,问你最少用几杯水,使得混合后的温度与给定的t温度最相近. (这里至少要用一杯水,并且,交替使用,比如:第一杯只能用热水,第二杯只能用冷水,第三杯只能用热水依次 ...

  5. 【Codeforces】920A Water The Garden(浇花)

    http://codeforces.com/problemset/problem/920/A 给你花坛的数目,花坛都是连续的,某一些花坛里有水龙头,给出了这些有水龙头的位置 The garden fr ...

  6. CodeForces - 1355E Restorer Distance(三分)

    题目链接:点击查看 题目大意:给出一个长度为 n 的数组 a ,现在可以对数组 a 进行数次操作: 将任意一个位置增加 1 ,代价为 A 将任意一个位置减少 1 ,代价为 R 将任意一个位置增加 1 ...

  7. codeforces1359C Mixing Water

    https://codeforces.com/problemset/problem/1359/C B题wa了2发,前期劣势巨大..然后过完c题一看board竟然只有400人过了c,运气比较好没卡住. ...

  8. Codeforces 107A. Dorm Water Supply 搜图

    A. Dorm Water Supply time limit per test 2 seconds

  9. CodeForces - 1359

    CodeForces - 1359 A - Berland Poker 将尽可能多的joker牌先给一个人,剩下的k-1个人平均分,使得差值最大int t,n,m,k; int main() {sca ...

最新文章

  1. Blender从头到尾创建低多边形角色学习教程 Low Poly Characters – Blender Bitesize Course
  2. linux获取近一小时日志,Linux分析日志获取最多访问的前10个IP
  3. 子程序与中断程序的异同_专业解读PLC编程中断的原理和用法
  4. Hadoop入门(二十四)Mapreduce的求TopK程序
  5. POJ - 2559 Largest Rectangle in a Histogram(单调栈)
  6. 数据部门如何All In AI
  7. php 图像居中裁剪函数,php中自定义图像居中裁剪函数实现的代码案例
  8. JAVA毕业设计飞羽羽毛球馆管理系统计算机源码+lw文档+系统+调试部署+数据库
  9. 18-2mapreduce的案例加强——好程序
  10. 一天天学WG--第一天
  11. 恶意文件 大数据案例库_Combo Cleaner for Mac(系统恶意软件清理工具)
  12. html 跑步比赛小游戏,趣味跑步比赛游戏
  13. php计算百分比加成_如何从PHP中的2个值计算百分比变化(增加和减少)
  14. 创建vue3项目(vite+js)
  15. 【虚拟机】虚拟化架构与系统部署(Windows系统安装)
  16. 愉快的学习就从翻译开始吧_0-Time Series Forecasting with the Long Short-Term Memory Network in Python
  17. SystemUI流程
  18. EventBus简介与使用
  19. 手机设置代理后无法上网
  20. 中高级Java面试题解析,剑指BATJ,提前祝大家程序员节快乐

热门文章

  1. 宝山区佳力图服务器空调维修价格,成都佳力图空调维修师傅
  2. php linux权限,Linux权限详细介绍
  3. bootstrap 固定最底部_bootstrap 固定底部导航自适应
  4. Redis集群在线分片
  5. Maven依赖项的适用范围scope
  6. 分库分表的类型和特点
  7. Spring 框架中的单例Beans 是线程安全的么?
  8. SimpleJdbcInsert 和SimpleJdbcCall
  9. RocketMQ的发展历史
  10. Nacos注册中心介绍