QOJ.ac

QOJ

時間限制: 10 s - 20 s 記憶體限制: 1024 MB 總分: 25

#5973. 儿童泳池

统计

儿童戏水池是一个大容器,你可以往里面注水,供小孩玩耍。

你有 $N$ 个不同的水源。第 $i$ 个水源的出水速率为 $R_i$,水温为 $C_i$。初始时,所有水源均处于关闭状态。每个水源只能开启一次,也只能关闭一次;开启或关闭水源的操作不需要额外时间。多个水源可以同时开启。

你的水池容量无限,但你希望以最快的速度将水池注满体积恰好为 $V$、温度恰好为 $X$ 的水。如果最优地控制水源的开启和关闭(不一定需要使用所有水源),那么注满水池所需的最少秒数是多少?

在本题中,将体积为 $V_0$、温度为 $X_0$ 的水与体积为 $V_1$、温度为 $X_1$ 的水混合,会瞬间产生体积为 $V_0+V_1$、温度为 $(V_0X_0 + V_1X_1) / (V_0+V_1)$ 的水。例如,将 5L 温度为 10 度的水与 10L 温度为 40 度的水混合,将得到 15L 温度为 30 度的水。此外,假设水在混合之外的时间内不会发生加热或冷却。

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例的第一行包含三个空格分隔的数字:整数 $N$,以及如上所述的实数 $V$ 和 $X$。

接下来的 $N$ 行,每行包含两个空格分隔的实数 $R_i$ 和 $C_i$,分别表示第 $i$ 个水源的出水速率和温度。体积单位为升,出水速率单位为升每秒,温度单位为摄氏度。

所有实数均精确到小数点后四位。

输出格式

对于每个测试用例,输出一行 "Case #x: y",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是将儿童戏水池注满所需的最少秒数。如果给定输入无法达到要求,则 $y$ 应为字符串 IMPOSSIBLE

如果 $y$ 与正确答案的绝对误差或相对误差在 $10^{-6}$ 以内,则视为正确。有关误差的解释以及我们接受的实数格式,请参阅 FAQ。你也可以在那里阅读关于我们输入实数格式的信息,其中小数点由字符 . 表示。

数据范围

$1 \le T \le 100$。 $0.1 \le X \le 99.9$。 $0.1 \le C_i \le 99.9$。

小数据范围

$1 \le N \le 2$。 $0.0001 \le V \le 100.0$。 $0.0001 \le R_i \le 100.0$。

大数据范围

$1 \le N \le 100$。 $0.0001 \le V \le 10000.0$。 $0.0001 \le R_i \le 10000.0$。

样例

样例输入 1

6
1 10.0000 50.0000
0.2000 50.0000
2 30.0000 65.4321
0.0001 50.0000
100.0000 99.9000
2 5.0000 99.9000
30.0000 99.8999
20.0000 99.7000
2 0.0001 77.2831
0.0001 97.3911
0.0001 57.1751
2 100.0000 75.6127
70.0263 75.6127
27.0364 27.7990
4 5000.0000 75.0000
10.0000 30.0000
20.0000 50.0000
300.0000 95.0000
40.0000 2.0000

样例输出 1

Case #1: 50.0000000
Case #2: 207221.843687375
Case #3: IMPOSSIBLE
Case #4: 0.500000000
Case #5: 1.428034895
Case #6: 18.975332068

说明

注意:样例 6 不在小数据范围的限制内。

在样例 1 中,唯一可用的水源温度恰好是我们需要的温度。最优策略是立即开启它,直到注满 10L 水。由于每秒流出 0.2L,这需要 50 秒。

在样例 2 中,一种最优策略是开启第一个水源并让它运行 207221.843687375 秒,然后在结束前约 0.092778156 秒开启第二个水源。

在样例 3 中,所有可用的水源温度都低于目标温度,因此无法达到目标。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.