题目链接:https://codeforces.com/contest/1359/problem/C

题意

热水温度为 $h$,冷水温度为 $c\ (c < h)$,依次轮流取等杯的热冷水,问二者在一容器中混合至最接近温度 $t$ 最少需要取多少杯。

题解

设取了 $x$ 杯热水,那么总的温度有两种情况:

  • 取的冷水杯数与热水相同:$\frac{xh + xc}{2x}$
  • 取的冷水杯数比热水少一杯:$\frac{xh + (x - 1)c}{2x - 1}$

第一种情况:

$\frac{xh + xc}{2x} = \frac{h + c}{2}$,所以只要取的热冷水杯数相同,总温度恒为 $\frac{h + c}{2}$ 。

第二种情况:

$\frac{xh + (x - 1)c}{2x - 1} = \frac{x(h+c)-c}{2x-1}$,求导得:$\frac{c-h}{(2x-1)^2}$,即当 $x≥1$ 时原函数单调递减,$\frac{x(h+c)-c}{2x-1} = \frac{h+c}{2 - \frac{1}{x}} - \frac{c}{2x-1}$,将 $x = 1$ 和 $x = + \infty$ 代入得值域为:$[\frac{h + c}{2}, h]$ 。

综上:

  • 如果 $t≥h$,因为值域为 $[\frac{h + c}{2}, h]$,此时与 $t$ 相差最小的就是 $h$,所以输出 $1$ 即可。
  • 同理,如果 $t≤\frac{h + c}{2}$,输出 $2$ 即可。
  • 否则二分查找总温度小于等于 $t$ 的最小杯数 $ans$,与大于 $t$ 的最小杯数 $ans-1$ 取与 $t$ 之差的较小者即可。

代码

#include <bits/stdc++.h>
using namespace std; int h, c, t; double cal(double x) {
return (x * h + (x - 1) * c) / (2 * x - 1);
} void solve() {
cin >> h >> c >> t;
if (t >= h)
cout << 1 << "\n";
else if (2 * t <= h + c)
cout << 2 << "\n";
else {
int ans = 0;
int l = 1, r = 1e6;
while (l <= r) {
int mid = (l + r) / 2;
if (cal(mid) <= t) {
ans = mid;
r = mid - 1;
} else l = mid + 1;
}
double mi = min(abs(t - cal(ans - 1)), abs(t - cal(ans)));
if (ans - 1 >= 1 and mi == abs(t - cal(ans - 1)))
cout << 2 * ans - 3 << "\n";
else
cout << 2 * ans - 1 << "\n";
}
} int main() {
int T; cin >> T;
while (T--) solve();
}

Educational Codeforces Round 88 (Rated for Div. 2) C. Mixing Water(数学/二分)的更多相关文章

  1. Educational Codeforces Round 88 (Rated for Div. 2) B. New Theatre Square(贪心)

    题目链接:https://codeforces.com/contest/1359/problem/B 题意 有一块 $n \times m$ 的地板和两种瓷砖: $1 \times 1$,每块花费为 ...

  2. Educational Codeforces Round 88 (Rated for Div. 2) D. Yet Another Yet Another Task(枚举/最大连续子序列)

    题目链接:https://codeforces.com/contest/1359/problem/D 题意 有一个大小为 $n$ 的数组,可以选取一段连续区间去掉其中的最大值求和,问求和的最大值为多少 ...

  3. Educational Codeforces Round 88 (Rated for Div. 2) A. Berland Poker(数学)

    题目链接:https://codeforces.com/contest/1359/problem/A 题意 $n$ 张牌可以刚好被平分给 $k$ 个人,其中有 $m$ 张 joker,当一个人手中的 ...

  4. Educational Codeforces Round 88 (Rated for Div. 2) E. Modular Stability(数论)

    题目链接:https://codeforces.com/contest/1359/problem/E 题意 有一大小为 $k$ 的数组,每个元素的值在 $[1,n]$ 间,若元素间两两不等,问有多少数 ...

  5. Educational Codeforces Round 88 (Rated for Div. 2) E、Modular Stability 逆元+思维

    题目链接:E.Modular Stability 题意: 给你一个n数,一个k,在1,2,3...n里挑选k个数,使得对于任意非负整数x,对于这k个数的任何排列顺序,然后用x对这个排列一次取模,如果最 ...

  6. Educational Codeforces Round 88 (Rated for Div. 2) D、Yet Another Yet Another Task

    题意: 给你一个含n个数a1,a2...an的数组,你要找到一个区间[l,r],使得al+a(l+1)+...+a(r-1)+ar减去max(al,a(l+1),...,a(r-1),ar)的值尽可能 ...

  7. Educational Codeforces Round 88 (Rated for Div. 2) B、New Theatre Square C、Mixing Water

    题目链接:B.New Theatre Square 题意: 你要把所有"." 都变成"*",你可以有两个选择,第一种就是一次铺一个方块(1*1),第二种就是同一 ...

  8. Educational Codeforces Round 58 (Rated for Div. 2) D 树形dp + 数学

    https://codeforces.com/contest/1101/problem/D 题意 一颗n个点的树,找出一条gcd>1的最长链,输出长度 题解 容易想到从自底向长转移 因为只需要g ...

  9. Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle(数学/双指针)

    题目链接:https://codeforces.com/contest/1366/problem/B 题意 大小为 $n$ 的数组 $a$,除了 $a_x = 1$,其余 $a_i = 0$,依次给出 ...

随机推荐

  1. 【Java基础】异常处理

    异常处理 异常概述 在 Java 语言中,将程序执行中发生的不正常情况称为"异常",但是开发过程中的语法错误和逻辑错误不是异常. 在执行过程中所发生的异常事件可分为两类: Erro ...

  2. Mac安装homebrew,postman,charles

    Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷. 1. ...

  3. 【Spring】Spring中的Bean - 3、Bean的作用域

    Bean的作用域 简单记录-Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)-Spring中的Bean 通过Spring容器创建一个Bean的实例时,不仅可以完成 ...

  4. 【win10】win10下两个显示器不同桌面壁纸

    win10系统下,双屏显示为不同的桌面壁纸 操作: 1.鼠标右键点击个性化 2.点击背景选项 3.在图片上右键选择要添加为背景的图片 同理,将另一个屏幕壁纸设为监视器1 最后效果为两个分屏为不同桌面壁 ...

  5. XSS - Labs 靶场笔记(下)

    Less - 11: 1.观察界面和源代码可知,依旧是隐藏表单 2.突破点是 $str11=$_SERVER['HTTP_REFERER']; (本题为HTTP头REFERER注入) 3.因此构造pa ...

  6. 利用sql_tuning_Advisor调优sql

    1.赋权给调优用户 grant ADVISOR to xxxxxx; 2.创建调优任务 使用sql_text创建 DECLARE my_task_name VARCHAR2 (30); my_sqlt ...

  7. 【转】自定义ALV控件的工具条按钮

    1 CLASS lcl_event_receiver DEFINITION DEFERRED. 2 3 DATA: itab TYPE TABLE OF spfli, 4 wa TYPE spfli. ...

  8. 解决安装mysql动态库libstdc++.so.6、libc.so.6版本过低问题

    初始化mysql报错: ./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ...

  9. Vue基础之Vue的模板语法

    Vue基础之Vue的模板语法 数据绑定 01 数据绑定最常见的形式就是使用插值表达式(两个大括号!)[也就是小胡子语法!mustache] <body> <!-- Vue.js的应用 ...

  10. 整合阿里云OSS

    整合阿里云OSS 一.对象存储OSS 为了解决海量数据存储与弹性扩容,采用云存储的解决方案- 阿里云OSS. 1.开通"对象存储OSS"服务 (1)申请阿里云账号 (2)实名认证 ...