题目链接: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. ACL技术(访问控制列表)

    • Access Control List    • 访问控制列表    • 是一种包过滤技术    • ACL基于IP包头的IP地址.四层TCP/UDP头部的端口号.[五层数据]进行过滤    • ...

  2. Linux下安装svn教程

    前言 最近买了新服务器,准备开始弄一些个人的开源项目.有了服务器当然是搞一波svn啦.方便自己的资料上传和下载.于是在此记录搭建svn的方式,方便以后直接使用. 安装 使用yum源进行安装,十分的方便 ...

  3. [C#.NET 拾遗补漏]14:使用结构体实现共用体

    在 C 和 C# 编程语言中,结构体(Struct)是值类型数据结构,它使得一个单一变量可以存储多种类型的相关数据.在 C 语言中还有一种和结构体非常类似的语法,叫共用体(Union),有时也被直译为 ...

  4. LeetCode700. 二叉搜索树中的搜索

    题目 简单递归 1 class Solution { 2 public: 3 TreeNode* searchBST(TreeNode* root, int val) { 4 if(!root) re ...

  5. python无法连接mysql,有个小坑,需要注意一下!

    尝试用python链接mysql数据库,按照教程里链接了小半夜,就是没有链接上,找了各种文章,最后发现是版本的问题,我想使用的模块是MySQLdb,刚刚去他们的官网看了一下,最近一次更新是2014年, ...

  6. UNDO表空间切换步骤

    1.新建UNDO表空间 create undo tablespace UNDOTBS2 datafile '/data01/testdb/undotbs01.dbf' size 1G; alter d ...

  7. CMU数据库(15-445)Lab0-环境搭建

    0.写在前面 从这篇文章开始.开一个新坑,记录以下自己做cmu数据库实验的过程,同时会分析一下除了要求我们实现的代码之外的实验自带的一些代码.争取能够对实现一个数据库比较了解.也希望能写进简历.让自己 ...

  8. java 记录数据持续变化时间

    1.需求:获取count为null和不为null的持续变化 [{count=0, time=0}, {count=10, time=1000}, {count=20, time=2000}, {cou ...

  9. mysql半同步复制跟无损半同步区别

    mysql半同步复制跟无损半同步复制的区别: 无损复制其实就是对semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之 ...

  10. java 本地方法(JNI)

    最近搞了一个调用第三方so库做登录认证的任务,以前对JNI没什么概念,最近学习了 <java核心技术> 本地方法 一章,把自己写的一些例子记录一下. 自己C语言真是渣渣,所以所有的例子都在 ...