欢迎来到起遇信息学
起遇信息学正处于上线筹建阶段,以下功能已全部开放免费体验: ✅ 完整题库浏览与代码提交评测(C / C++ / Python / Java 等) ✅ 入门到进阶的系列课程试读、作业与考试 ✅ AI 提示、AI 作业分析等智能助教功能 ✅ 赛事模拟与个人能力报告 ✅ 邮箱注册开放 ⏳ 付费课程订阅与微信/支付宝支付通道 ⏳ 手机号登录,微信扫码登录、微信公众号绑定 使用中如遇任何问题,欢迎通过页面底部 **"联系我们"** 与我们沟通。
CF1458B.Glass Half Spilled
Glass Half Spilled
题目描述
桌上有 个玻璃杯,编号为 。第 个玻璃杯最多可以容纳 单位的水,目前其中有 单位的水。
你希望选择 个玻璃杯,并在它们中收集尽可能多的水。为此,你可以任意多次地将水从一个杯子倒到另一个杯子中。然而,由于杯子的奇怪形状(绝对不是因为你的笨拙),每次你尝试转移任意数量的水时,一半的水都会洒到地上。
具体来说,假设某个玻璃杯 目前有 单位的水,玻璃杯 有 单位的水。你尝试从玻璃杯 向玻璃杯 倒 单位的水(显然 不能超过 )。那么,会有 单位的水洒到地上。倒水后,玻璃杯 剩下 单位的水,玻璃杯 变为 单位的水(多余的水同样会洒出)。
每次倒水时,你可以任意选择从哪个玻璃杯 向哪个玻璃杯 倒水,倒水的量 也可以是任意正实数。
对于每个 ,请你求出经过若干次倒水操作后,任意选择 个玻璃杯,能够收集到的最大水量。
输入格式
第一行包含一个整数 (),表示玻璃杯的数量。
接下来的 行,每行包含两个整数 和 (,),分别表示第 个玻璃杯的容量和当前水量。
输出格式
输出 个实数,分别表示在 个玻璃杯中能够收集到的最大水量。你的答案只要每个数与精确答案的绝对误差或相对误差不超过 即可被接受。
说明/提示
在样例中,你可以这样操作:
- 对于 ,将前两个玻璃杯的水全部倒入第三个杯子,会洒掉 单位的水,最终第三个杯子中有 单位的水;
- 对于 ,将第三个杯子的水倒回前两个中的任意一个,会洒掉 单位的水,最终可以收集到 单位的水;
- 对于 ,无需操作,所有 单位的水都可以收集到。
由 ChatGPT 4.1 翻译
样例
3
6 5
6 5
10 2
7.0000000000 11.0000000000 12.0000000000
在线编程 IDE
建议全屏模式获得最佳体验
| 进入全屏编程 | Alt+E |
| 递交评测 | Ctrl+Enter |
| 注释/取消注释 | Ctrl+/ |
| 缩放字体 | Ctrl+滚轮 |