#P13170. [GCJ 2017 #1C] Core Training
[GCJ 2017 #1C] Core Training
Description
编写 Code Jam 题目很难,因此我们开发了一个 AI 来提出新点子。为了让 AI 尽可能有创造力,我们为它配备了 个不同的“核心”,每个核心都有自己的“个性”。然而,就像人一样,这些核心可能会分心、损坏或拒绝工作;第 个核心正常工作的概率为 。只要至少有 个核心正常工作,AI 就能正常运行。否则,它很可能会变得邪恶,把我们困在自己设计的恶魔谜题迷宫里。谁知道它会对 Code Jam 做些什么——也许会写出一堆难到爆炸的概率题!
为了防止这种情况发生,我们计划训练一个或多个核心,使其更可靠。我们总共有 个“训练单元”可以用来提升核心的可靠性。将 个训练单元分配给第 个核心,会使其成功概率增加 。我们可以随意分配这些训练单元,也可以让一个或多个核心不分配任何训练单元。当然,核心的成功概率不能超过 。
如果我们以最大化 AI 正常运行概率的方式分配训练单元,这个概率是多少?
Input Format
输入的第一行包含测试用例数 。接下来有 组测试数据,每组包含三行。第一行包含两个整数 和 ,分别表示核心总数和 AI 正常运行所需的最少正常核心数。第二行包含一个有理数 ,表示训练单元的数量。第三行包含 个有理数 ,第 个数表示第 个核心正常工作的概率。所有概率均精确到小数点后四位。
Output Format
对于每个测试用例,输出一行,格式为 Case #x: y,其中 是测试用例编号(从 1 开始), 是在最优分配训练单元后 AI 正常运行的概率。如果 与正确答案的绝对误差或相对误差不超过 ,则视为正确。
4
4 4
1.4000
0.5000 0.7000 0.8000 0.6000
2 2
1.0000
0.0000 0.0000
2 1
0.0000
0.9000 0.8000
2 1
0.1000
0.4000 0.5000
Case #1: 1.000000
Case #2: 0.250000
Case #3: 0.980000
Case #4: 0.760000
Hint
样例解释
注意,最后两个样例不会出现在小数据集 1 中。
在样例 1 中,我们有足够的训练单元,可以让所有核心的成功概率都变为 1,因此 AI 一定能正常运行。
在样例 2 中,两个核心都必须正常工作,AI 才能正常运行,因此必须给每个核心分配一些训练单元。最优方案是将每个核心都训练到 。此时 AI 正常运行的概率为 。其他分配方式都不如这个好;比如把一个核心训练到 ,另一个训练到 ,成功概率只有 。
在样例 3 中,我们没有训练单元可用,且至少需要一个核心正常工作。可以先计算 AI 无法正常工作的概率,即所有核心都失效。两个核心都失效的概率为 。因此至少有一个核心正常工作的概率,即 AI 正常运行的概率为 。
在样例 4 中,最优策略是将所有训练单元都分配给第二个核心。这样至少有一个核心正常工作的概率为 。其他分配方式都不如这个好;比如全部分配给第一个核心只得到 ,平均分配给两个核心得到 。
数据范围
- 。
- 。
- 对所有 ,。
- 。(不会有多于可用的训练单元。)
小数据集 1(15 分,测试集 1 - 可见)
- 时间限制:5 秒。
- 。(所有核心都必须正常工作,AI 才能正常运行。)
小数据集 2(28 分,测试集 2 - 可见)
- 时间限制:10 秒。
- 。
由 ChatGPT 4.1 翻译
京公网安备 11011102002149号